在C#中如何序列化ArrayList,并且ArrayList中存放自定义的类型数据?
请看如下代码:
----------------------------------------
先定义一个自定义类型:
- public struct LocalNetInfo
- {
- string localnet_name;
- string localnet_code;
- string pub_connection;
- string local_connection;
- public string Name
- {
- get { return localnet_name; }
- set { localnet_name = value; }
- }
- public string Code
- {
- get { return localnet_code; }
- set { localnet_code = value; }
- }
- public string PubConnection
- {
- get { return pub_connection; }
- set { pub_connection = value; }
- }
- public string LocalConnection
- {
- get { return local_connection; }
- set { local_connection = value; }
- }
- public override string ToString()
- {
- return Name;
- }
- }
下面是序列化和反序列化函数:
- public string SerializeArrayList(ArrayList al)
- {
- Type[] extra = new Type[1];
- extra[0] = typeof(LocalNetInfo);
- XmlSerializer xs = new XmlSerializer(typeof(ArrayList), extra);
- MemoryStream ms = new MemoryStream();
- XmlTextWriter tw = new XmlTextWriter(ms, Encoding.Default);
- xs.Serialize(tw, al);
- tw.Close();
- return Encoding.Default.GetString(ms.ToArray());
- }
- public ArrayList DeserializeArrayList(string serQuestions, Type type, Type[] extratype)
- {
- XmlSerializer xs = new XmlSerializer(type, extratype);
- StreamReader sr = new StreamReader(new MemoryStream(System.Text.Encoding.Default.GetBytes(serQuestions)), System.Text.Encoding.Default);
- return (ArrayList)xs.Deserialize(sr);
- }
测试代码:
- ArrayList al = new ArrayList();
- LocalNetInfo info = new LocalNetInfo();
- info.Code = "11";
- info.Name = "name1";
- info.PubConnection = "ewere";
- al.Add(info);
- LocalNetInfo info2 = new LocalNetInfo();
- info2.Code = "112";
- info2.Name = "name12";
- info2.PubConnection = "ewere2";
- al.Add(info2);
- //序列化..............
- string s2 = SerializeArrayList(al);
- Type[] extra2 = new Type[1];
- extra2[0] = typeof(LocalNetInfo);
- //反序列化...........
- ArrayList la = DeserializeArrayList(s2, typeof(ArrayList), extra2);
需要说明在反序列化时这里用到了Type[],这是关键!