2009-07-20 45 views
3

我正在測試我的課程中的XML序列化,但是我注意到當我運行該程序時ID號沒有得到保存。XML序列化是否需要讀取/寫入屬性?

所以我環顧四周,並修改了一些東西,但沒有什麼工作,然後我看到,除ID的所有領域有get和set屬性。所以我增加了一套;財產對我的身份證號碼和poof它的工作。 問題是,它是否必須設置;並得到;函數在我的所有屬性的XML序列化工作?

我不希望對象已經創建後修改的ID號(它的自動生成的)。

回答

5

是的,這是基本的XML序列化的限制。從XML Serialization docs

只有公共屬性和字段可以 被序列化。屬性必須有 公共訪問器(獲取並設置 方法)。如果你必須序列 非公開數據,使用 BinaryFormatter類而不是XML序列化 。

XML序列化是不夠靈活一個可能會喜歡。

+0

我注意到他沒有提到他使用的是哪個版本的框架。這是不是在.NET 3.5中改變了? – 2009-07-20 17:29:24

0

請注意,如果您想要序列的非公開數據,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 
} 

還要注意的是它不使用你的構造......或者確實任何構造函數 - 它會作弊,允許它創建一個對象並在之後填充數據。