如何防止序列化后对序列化类进行更改
本文关键字:序列化 何防止 | 更新日期: 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]
属性。
[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