我在班上测试XML序列化,但是我发现在运行程序时没有保存ID号。
所以我环顾四周并修改了一些东西,但没有任何效果,然后我看到除了ID以外的所有字段都有get和set属性。所以我添加了一套;财产到我的身份证号码和工作的poof。 问题是,是否必须设定;得到;我的所有属性上的函数都可以使XML序列化工作吗?
我不希望在创建对象(自动生成)后修改ID号。
答案 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
}
另请注意,它不使用您的构造函数...或者确实任何构造函数 - 它作弊,允许它创建一个对象并在之后填充数据。