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[],這是關鍵!

 

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