为什么不';t需要用要序列化的[DataContract]或[Serializable]属性标记类

本文关键字:DataContract 属性 Serializable 序列化 为什么不 | 更新日期: 2023-09-27 18:20:35

Microsoft在其文章"如何使用Visual C#将对象序列化为XML"中提供了代码

using System;
public class clsPerson
{
  public  string FirstName;
  public  string MI;
  public  string LastName;
}
class class1
{ 
   static void Main(string[] args)
   {
      clsPerson p=new clsPerson();
      p.FirstName = "Jeff";
      p.MI = "A";
      p.LastName = "Price";
      XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
      x.Serialize(Console.Out, p);
      Console.WriteLine();
      Console.ReadLine();
   }
}    

但是,为什么不需要用[DataContract]或[Serializable]属性来标记类clsPerson呢?

为什么不';t需要用要序列化的[DataContract]或[Serializable]属性标记类

因为XmlSerializer不需要将这些属性放在类上。只有BinaryFormatter和DataContractSerializer能做到这一点。因此,DataContractSerializer可以不使用。

请参阅相关问题:为什么要序列化的对象需要Serializable Attribute

根据设计,XML序列化使用get-and-set访问器序列化公共字段和公共属性。序列化类型还必须具有无参数构造函数。这是唯一的合同