如何防止序列化后对序列化类进行更改

本文关键字:序列化 何防止 | 更新日期: 2023-09-27 18:20:19

我有这个类:

[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私有化,但这样我就会失去序列化功能。

如何防止序列化后对序列化类进行更改

您应该使用DataContractSerializer来序列化您的类,因为它不会将序列化仅限于公共属性。

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

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