在C#中如何序列化ArrayList,并且ArrayList中存放自定義的類型數(shù)據(jù)?
請看如下代碼:
----------------------------------------
先定義一個自定義類型:
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;
}
}
考試大提示: 下面是序列化和反序列化函數(shù):
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[],這是關(guān)鍵!
請看如下代碼:
----------------------------------------
先定義一個自定義類型:
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;
}
}
考試大提示: 下面是序列化和反序列化函數(shù):
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[],這是關(guān)鍵!