我有这堂课:
[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;
}
当系统从xml文件通过XmlSerializer加载时,该类被反序列化。
我不想允许任何程序员在加载对象后更改对象的内容。一种方法是通过向每个项添加public get; private set;
来使setter变为私有,但随后我将失去序列化功能。
答案 0 :(得分:4)
您应该使用DataContractSerializer
来序列化您的类,因为它不会将序列化仅限制为公共属性。
此外,您无需为XML序列化指定[Serializable]
属性。
答案 1 :(得分: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; } }
}
有关详细信息,请参阅:
和