我正在測試我的課程中的XML序列化,但是我注意到當我運行該程序時ID號沒有得到保存。XML序列化是否需要讀取/寫入屬性?
所以我環顧四周,並修改了一些東西,但沒有什麼工作,然後我看到,除ID的所有領域有get和set屬性。所以我增加了一套;財產對我的身份證號碼和poof它的工作。 問題是,它是否必須設置;並得到;函數在我的所有屬性的XML序列化工作?
我不希望對象已經創建後修改的ID號(它的自動生成的)。
我正在測試我的課程中的XML序列化,但是我注意到當我運行該程序時ID號沒有得到保存。XML序列化是否需要讀取/寫入屬性?
所以我環顧四周,並修改了一些東西,但沒有什麼工作,然後我看到,除ID的所有領域有get和set屬性。所以我增加了一套;財產對我的身份證號碼和poof它的工作。 問題是,它是否必須設置;並得到;函數在我的所有屬性的XML序列化工作?
我不希望對象已經創建後修改的ID號(它的自動生成的)。
是的,這是基本的XML序列化的限制。從XML Serialization docs:
只有公共屬性和字段可以 被序列化。屬性必須有 公共訪問器(獲取並設置 方法)。如果你必須序列 非公開數據,使用 BinaryFormatter類而不是XML序列化 。
XML序列化是不夠靈活一個可能會喜歡。
請注意,如果您想要序列的非公開數據,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
}
還要注意的是它不使用你的構造......或者確實任何構造函數 - 它會作弊,允許它創建一個對象並在之後填充數據。
我注意到他沒有提到他使用的是哪個版本的框架。這是不是在.NET 3.5中改變了? – 2009-07-20 17:29:24