XML序列化是否需要属性进行读/写?

时间:2009-07-20 17:20:35

标签: c# properties xml-serialization

我在班上测试XML序列化,但是我发现在运行程序时没有保存ID号。

所以我环顾四周并修改了一些东西,但没有任何效果,然后我看到除了ID以外的所有字段都有get和set属性。所以我添加了一套;财产到我的身份证号码和工作的poof。 问题是,是否必须设定;得到;我的所有属性上的函数都可以使XML序列化工作吗?

我不希望在创建对象(自动生成)后修改ID号。

2 个答案:

答案 0 :(得分:5)

是的,这基本上是对XML序列化的限制。来自XML Serialization docs

  

只有公共属性和字段可以   被序列化。属性必须有   公共访问者(获取和设置   方法)。如果必须序列化   非公开数据,使用   BinaryFormatter类而不是XML   序列化。

XML序列化并不像人们想象的那样灵活。

答案 1 :(得分:1)

请注意,如果要将非公共数据序列化为xml,DataContractSerializer可能会有用。它不像XmlSerializer那样灵活(并且您不能指定属性),但它可以序列化非公共数据:

[DataContract]
public class Person {
    [DataMember]
    private int id;

    public int Id {get {return id;}} // immutable

    public Person(int id) { this.id = id; }

    [DataMember]
    public string Name {get;set;} // mutable
}

另请注意,它不使用您的构造函数...或者确实任何构造函数 - 它作弊,允许它创建一个对象并在之后填充数据。