正在阅读:基础编程:.Net里的序列化基础编程:.Net里的序列化

2004-05-19 10:11 出处:CSDN 作者:possible_Y 责任编辑:huangpeidan

  
  // 下面是证明
  Console.WriteLine("n1: {0}", obj.n1);
  Console.WriteLine("n2: {0}", obj.n2);
  Console.WriteLine("str: {0}", obj.str);
  
  二、SoapFormatter

  前面我们用BinaryFormatter以二进制格式来序列化。很容易的我们就能把前面的例子改为用SoapFormatter的,这样将以xml格式化,因此能有更好的可移植性。所要做的更改只是将以上代码中的格式化程序换成 SoapFormatter,而 Serialize 和 Deserialize 调用不变。对于上面使用的示例,该格式化程序将生成以下结果。
  
  <SOAP-ENV:Envelope
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:SOAP- ENC=http://schemas.xmlsoap.org/soap/encoding/
    xmlns:SOAP- ENV=http://schemas.xmlsoap.org/soap/envelope/
    SOAP-ENV:encodingStyle=
  "http://schemas.microsoft.com/soap/encoding/clr/1.0
      http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:a1="http://schemas.microsoft.com/clr/assem/ToFile">

    <SOAP-ENV:Body>
      <a1:MyObject id="ref-1">
        <n1>1</n1>
        <n2>24</n2>
        <str id="ref-3">一些字符串</str>
      </a1:MyObject>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

  在这里需要注意的是,无法继承 Serializable 属性。如果从 MyObject 派生出一个新的类,则这个新的类也必须使用该属性进行标记,否则将无法序列化。例如,如果试图序列化以下类实例,将会显示一个 SerializationException,说明 MyStuff 类型未标记为可序列化。
  
  public class MyStuff : MyObject
  {
    public int n3;
  }
  
  然而关于格式化器,还有个问题,假设我们只需要xml,但不需要soap特有的额外信息,那么该怎么做?

  有两个方案:
  1、编写一个实现IFormatter接口的类,采用的方式类似于SoapFormatter,但是可以没有你不需要的信息;
  2、使用框架提供的类XmlSerializer。

  XmlSerializer类和前两个主流的序列化类的几个不同点是:

  希望看到更多更经典的开发技巧,请随时刷新《开发特区》栏目。
察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品