打印本文 打印本文  关闭窗口 关闭窗口  
C#中如何序列化ArraryList和自定义类型
作者:佚名  文章来源:不详  点击数  更新时间:2008/10/22 21:29:45  文章录入:杜斌  责任编辑:杜斌

  在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[],这是关键! 考试大论坛
打印本文 打印本文  关闭窗口 关闭窗口