我有一段代码使用 datacontract 序列化程序对 .xml 文件进行序列化和反序列化。公共属性之一是枚举。.xml 有可能会被手动编辑,然后作为枚举的属性可能具有一些不属于枚举的值。在这种情况下,数据合约在脱轨时失败。
如何处理?什么是好的解决方案?
我有一段代码使用 datacontract 序列化程序对 .xml 文件进行序列化和反序列化。公共属性之一是枚举。.xml 有可能会被手动编辑,然后作为枚举的属性可能具有一些不属于枚举的值。在这种情况下,数据合约在脱轨时失败。
如何处理?什么是好的解决方案?
试试这个:
public enum E
{
One,
Two
}
[DataContract]
public class C
{
[DataMember]
private string myField;
public E MyProperty
{
get
{
E result;
return Enum.TryParse<E>(myField, out result) ? result : default(E);
}
set { myField = value.ToString(); }
}
}
由于用户可以将任何内容放入相应的 XML 标记中,因此我看不到最好的解决方案,而不是将属性值存储在字符串字段中。
如果性能至关重要,您可以将枚举值存储在常规属性中,并且仅在序列化/反序列化数据时使用字符串字段(请参阅OnSerializingAttribute
/ OnDeserializedAttribute
)。