使用datacontract序列化C#处理不属于枚举的值

时间:2012-09-17 16:42:11

标签: c# .net datacontractserializer

我有一段代码,它使用datacontract序列化程序对.xml文件进行序列化和反序列化。其中一个公共财产是枚举。有可能手动编辑.xml,然后可能是枚举属性可能有一些不属于枚举的值。在这种情况下,数据收集失败,同时脱壳。

如何处理?什么是好的解决方案?

1 个答案:

答案 0 :(得分:2)

试试这个:

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)。