asp.net xml序列化与反序列化

  在网上找了一些关于xml序列化与反序列化的资料,摘录下:

  在.NET下有一种技术叫做对象序列化,它可以将对象序列化为二进制文件、XML文件、SOAP文件,这样, 使用经过序列化的流进行传输效率就得到了大大的提升。

  在.NET中提供了两种序列化:二进制序列化、XML和SOAP序列化。对于WEB应用来说,用得最多的是第二种———XML和SOAP序列化。

  XML 序列化将对象的公共字段和属性或者方法的参数和返回值转换(序列化)为符合特定 XML 架构定义 语言 (XSD) 文档的 XML 流。

  XML 序列化生成强类型的类,并为存储或传输目的将其公共属性和字段转换为序列格式(在此情况下为

  XML)。

  注意:

  1、XML 序列化不转换方法、索引器、私有字段或只读属性(只读集合除外)。

  2、使用Serialize和Deserialize需要指明命令空间System.Xml.Serialization,using System.IO。

  xml序列化简单的应用举例:

  有个类定义为:

  C#复制代码

  public class webinfo

  {

  public string userName;

  public string webName;

  public string webUrl;

  }

  那么通过序列化我们可以将其序列化为: XML/HTML复制代码

  <?xml version="1.0"?>

  <webinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <userName>管理资源吧</userName>

  <webName>脚本</webName>

  <webUrl>http://www.glzy8.com</webUrl>

  </webinfo>

  主要的代码如下: C#复制代码

  webinfo info = new webinfo();

  info.userName = "管理资源吧";

  info.webName = "脚本";

  info.webUrl = "http://www.glzy8.com";

  //用webinfo这个类造一个XmlSerializer

  XmlSerializer ser = new XmlSerializer(typeof(webinfo));

  //xml保存路径,序列化成功后可以通过查看该文件看到序列化后结果

  string path = Server.MapPath("webinfo.xml");

  try

  {

  //Stream用于提供字节序列的一般视图,这里将在根目录下建立一个xml文件

  Stream file = new FileStream(path, FileMode.Create, FileAccess.Write);

  //把Stream对象和info一起传入,序列化出一个XML文件,如果没这一步,建立的xml内容为空

  ser.Serialize(file, info);

  //释放资源

  file.Close();

  file.Dispose();

  Response.Write("序列化成功");

  }

  catch (Exception ex)

  {

  Response.Write(ex.Message);

  }

  finally

  {

  }

  反序列化就是读取xml文件并将其值自动匹配给类中的公有属性或方法或字段,也就是上面的逆操作。 C#复制代码

  webinfo info = new webinfo();

  //用webinfo这个类造一个XmlSerializer

  XmlSerializer ser = new XmlSerializer(typeof(webinfo));

  string path = Server.MapPath("webinfo.xml");

  //Stream用于提供字节序列的一般视图,这里将打开一个xml文件

  Stream file = new FileStream(path, FileMode.Open, FileAccess.Read);

  //把字节序列(stream)反序列化

  info = (webinfo)ser.Deserialize(file);

  Response.Write("站长:" + info.userName + "<br>");

  Response.Write("站名:" + info.webName + "<br>");

  Response.Write("域名:" + info.webUrl);

  输出结果:

  为了更好的封装和保护类的成员和方法,我们将类webinfo改写成: 折叠展开C#复制代码

  public class webinfo

  {

  //站长

  private string userName;

  public string UserName

  {

  get

  {

  return userName;

  }

  set

  {

  userName = value;

  }

  }

  //站名

  private string webName;

  public string WebName

  {

  get

  {

  return webName;

  }

  set

  {

  webName = value;

  }

  }

  //域名

  private string webUrl;

  public string WebUrl

  {

  get

  {

  return webUrl;

  }

  set

  {

  webUrl = value;

  }

  }

  }

  使用时区别仅仅是小小的改动具体的可以看下面: C#复制代码

  webinfo info = new webinfo();

  info.userName = "管理资源吧";-->info.UserName = "管理资源吧";

  info.webName = "脚本"; -->info.WebName  = "脚本";

  info.webUrl = "http://www.glzy8.com";  -->//自己写吧