2012-01-16 90 views
3

後,我有這個類:如何防止序列化類的變化系列化

[Serializable] 
public sealed class Broker 
{ 
    public int Id; 
    public string Name; 
    public string Hosts; 
    public string DefaultValidatorsNameSpace; 
    public string DefaultRendererNameSpace; 
    public bool IsDefault; 
    public CrmCredentials CrmCredentials; 
} 

該類被反序列化時,系統加載,從通過XmlSerializer的XML文件。

我不想讓任何程序員在加載完成後更改對象的內容。一種方法是通過將public get; private set;添加到每個項目來使setter私人化,但是然後我將失去序列化功能。

回答

4

您應該使用DataContractSerializer來序列化您的類,因爲它不會將序列化僅限於公共屬性。

此外,您不需要爲XML序列化指定[Serializable]屬性。

+0

請固定鏈接 – sra 2012-01-16 06:54:05

+0

@sra:固定的,謝謝。 – Groo 2012-01-16 07:55:56

0

YAXLib是一個XML序列化庫,可讓您序列化任何所需的字段。您不需要公開您需要序列化爲公共的字段,只需將該選項設置爲僅序列化屬性字段。這就是:

[YAXSerializableType(FieldsToSerialize=YAXSerializationFields.AttributedFieldsOnly)] 
public sealed class Broker 
{ 
    [YAXSerializableField] 
    public int Id { get; private set; } 

    [YAXSerializableField] 
    public string Name { get; private set; } 

    // or equaly give attribute to a private field 
    [YAXSerializableField] 
    private string _hosts; 

    // and leave the property un-attributed 
    public string Hosts { get { return _hosts; } } 

} 

欲瞭解更多信息,請參閱:

http://yaxlib.codeplex.com

http://www.codeproject.com/KB/XML/yaxlib.aspx