c#类的序列化

  下面的示例显示一个具有公共字段的简单类:  
   
  [C#]  
  public   class   OrderForm{  
        public   DateTime   OrderDate;  
  }  
  当将此类的实例序列化时,该实例可能类似于下面这样:  
   
   
        12/12/01  
 
 
  有关序列化的更多示例,请参阅   XML   序列化的示例。  
   
  可以序列化的项  
  使用   XmLSerializer   类,可将下列项序列化。    
   
  公共类的公共读/写属性和字段    
  实现   ICollection   或   IEnumerable   的类(请注意,只序列化集合,不序列化公共属性。)    
  XmlElement   对象    
  XmlNode   对象    
  DataSet   对象    
  序列化和反序列化对象  
  若要序列化对象,首先创建要序列化的对象并设置它的公共属性和字段。为此,必须确定要用以存储   XML   流的传输格式(作为流还是作为文件)。例如,如果   XML   流必须以永久形式保存,则创建   FileStream   对象。当您反序列化对象时,传输格式确定您将创建流还是文件对象。确定了传输格式之后,就可以根据需要调用   Serialize   或   Deserialize   方法。  
   
  序列化对象    
   
  创建对象并设置它的公共字段和属性。    
  使用该对象的类型构造   XmlSerializer。有关更多信息,请参阅   XmlSerializer   类构造函数。    
  调用   Serialize   方法以生成对象的公共属性和字段的   XML   流表示形式或文件表示形式。下面的示例创建一个文件。    
  MySerializableClass   myObject   =   new   MySerializableClass();  
  //   Insert   code   to   set   properties   and   fields   of   the   object.  
  XmlSerializer   mySerializer   =   new    
  XmlSerializer(typeof(MySerializableClass));  
  //   To   write   to   a   file,   create   a   StreamWriter   object.  
  StreamWriter   myWriter   =   new   StreamWriter("myFileName.xml");  
  mySerializer.Serialize(myWriter,   myObject);  
  反序列化对象    
   
  使用要反序列化的对象的类型构造   XmlSerializer。    
  调用   Deserialize   方法以产生该对象的副本。在反序列化时,必须将返回的对象强制转换为原始对象的类型,如下面的示例中所示。下面的示例将该对象反序列化为文件,但是也可以将该对象反序列化为流。    
  [C#]  
  MySerializableClass   myObject;  
  //   Construct   an   instance   of   the   XmlSerializer   with   the   type  
  //   of   object   that   is   being   deserialized.  
  XmlSerializer   mySerializer   =    
  new   XmlSerializer(typeof(MySerializableClass));  
  //   To   read   the   file,   create   a   FileStream   object.  
  FileStream   myFileStream   =    
  new   FileStream("myFileName.xml",   FileMode.Open);  
  //   Call   the   Deserialize   method   and   cast   to   the   object   type.  
  myObject   =   (MySerializableClass)    
  mySerializer.Deserialize(myFileStream)  
  有关   XML   序列化的更多示例,请参阅   XML   序列化的示例。  
   
  使用   XML   序列化的好处  
  XmlSerializer   类在您将对象序列化为   XML   时为您提供完整而灵活的控制。如果您正在创建   XML   Web   services,则可以将控制序列化的属性应用于类和成员以确保   XML   输出符合特定的架构。  
   
  例如,XmlSerializer   使您能够:    
   
  指定应将字段或属性编码为特性还是元素。    
  指定要使用的   XML   命名空间。    
  如果字段或属性名不合适,则指定元素或特性的名称。    
  XML   序列化的另一个好处是:只要生成的   XML   流符合给定的架构,则对于所开发的应用程序就没有任何约束。假定有这样一个用于描述图书的架构,它具有标题、作者、出版商和   ISBN   编号元素。您可以开发一个以您所希望的任何方式(例如,作为图书订单,或作为图书清单)处理   XML   数据的应用程序。在任一种情况下,唯一的要求是   XML   流应当符合指定的   XML   架构定义语言   (XSD)   架构。  
   
  XML   序列化注意事项  
  使用   XmlSerializer   类时,应考虑下列情况:    
   
  已序列化的数据中仅包含类和数据的形状。不包括类型标识和程序集信息。    
  只能序列化公共属性和字段。如果需要序列化非公共数据,请使用   BinaryFormatter   类而不是   XML   序列化。    
  类必须有一个将由   XmlSerializer   序列化的默认构造函数。    
  不能序列化方法。    
  XmlSerializer   可以以不同方式处理实现   IEnumerable   或   ICollection   的类(条件是这些类满足某些要求)。实现   IEnumerable   的类必须实现带单个参数的公共   Add   方法。Add   方法的参数必须与从   GetEnumerator   方法返回的   IEnumerator.Current   属性所返回的类型一致(多态)。除实现   IEnumerable   外还实现   ICollection   的类(如   CollectionBase)必须有一个取整数的公共   Item   索引属性(在   C#   中为索引器),并且它必须有一个整数类型的公共   Count   属性。Add   方法的参数必须与从   Item   属性返回的类型相同或与该类型的某个基的类型相同。对于实现   ICollection   的类,要序列化的值将从索引   Item   属性检索,而不是通过调用   GetEnumerator   来检索。另外请注意,除返回另一个集合类(实现   ICollection   的集合类)的公共字段之外,将不序列化公共字段和属性。有关示例,请参阅   XML   序列化的示例。

 

来源:http://topic.csdn.net/t/20030625/15/1955952.html

你可能感兴趣的:(dotNet)