C#中如何序列化ArraryList和自定义类型

在C#中如何序列化ArrayList,并且ArrayList中存放自定义的类型数据?

请看如下代码:

----------------------------------------

先定义一个自定义类型:

  1.     public struct LocalNetInfo
  2.     {
  3.         string localnet_name;
  4.         string localnet_code;
  5.         string pub_connection;
  6.         string local_connection;
  7.         public string Name
  8.         {
  9.             get { return localnet_name; }
  10.             set { localnet_name = value; }
  11.         }
  12.         public string Code
  13.         {
  14.             get { return localnet_code; }
  15.             set { localnet_code = value; }
  16.         }
  17.         public string PubConnection
  18.         {
  19.             get { return pub_connection; }
  20.             set { pub_connection = value; }
  21.         }
  22.         public string LocalConnection
  23.         {
  24.             get { return local_connection; }
  25.             set { local_connection = value; }
  26.         }
  27.         public override string ToString()
  28.         {
  29.             return Name;
  30.         }
  31.     }

下面是序列化和反序列化函数:

  1.         public string SerializeArrayList(ArrayList al)
  2.         {
  3.             Type[] extra = new Type[1];
  4.             extra[0] = typeof(LocalNetInfo);
  5.             XmlSerializer xs = new XmlSerializer(typeof(ArrayList), extra);
  6.             MemoryStream ms = new MemoryStream();
  7.             XmlTextWriter tw = new XmlTextWriter(ms, Encoding.Default);
  8.             xs.Serialize(tw, al);
  9.             tw.Close();
  10.             return Encoding.Default.GetString(ms.ToArray());
  11.         }
  12.         public ArrayList DeserializeArrayList(string serQuestions, Type type, Type[] extratype)
  13.         {
  14.             XmlSerializer xs = new XmlSerializer(type, extratype);
  15.             StreamReader sr = new StreamReader(new MemoryStream(System.Text.Encoding.Default.GetBytes(serQuestions)), System.Text.Encoding.Default);
  16.             return (ArrayList)xs.Deserialize(sr);
  17.         }

测试代码:

  1.             ArrayList al = new ArrayList();
  2.             LocalNetInfo info = new LocalNetInfo();
  3.             info.Code = "11";
  4.             info.Name = "name1";
  5.             info.PubConnection = "ewere";
  6.             al.Add(info);
  7.             LocalNetInfo info2 = new LocalNetInfo();
  8.             info2.Code = "112";
  9.             info2.Name = "name12";
  10.             info2.PubConnection = "ewere2";
  11.             al.Add(info2);
  12.             //序列化..............
  13.             string s2 = SerializeArrayList(al);
  14.             Type[] extra2 = new Type[1];
  15.             extra2[0] = typeof(LocalNetInfo);
  16.             //反序列化...........
  17.             ArrayList la = DeserializeArrayList(s2, typeof(ArrayList), extra2);

需要说明在反序列化时这里用到了Type[],这是关键!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章