实例验证错误:*不是*的有效值

grm*_*hel 5 c# xml-deserialization

我正在尝试反序列化一个XML字符串,其中元素的值不在我的Enum值的范围内.

Public enum MyEnum
{
    Unknown,
    Car,
    Bicycle,
    Boat
}

[SerializableAttribute()]
public class MyClass
{
    private string _id;
    private MyEnum _myEnum;

    public string ID
    {
        get { return _id; }
        set { _id = value; }
    }

    public MyEnum EnumValue
    {
        get { return _myEnum; }
        set { _myEnum = value; }
    }

    public MyClass(string id)
    {
        this._id = id;
    }

    public MyClass() : this("") { }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试反序列化后面的字符串(注意Plane作为枚举值):

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><MyClass><ID>1234567890123456789</ID><EnumValue>Plane</EnumValue></MyClass>
Run Code Online (Sandbox Code Playgroud)

然后我的反序列化将抛出异常,甚至在它为EnumValue命中我的公共字段之前,会出现以下异常消息:

实例验证错误:'Plane'不是EnumValue的有效值

是否可以返回EnumValue的默认值,如果我尝试在XML中解析的值不支持EnumValue?例如.对于此处提供的XML字符串,EnumValue应设置为"Unknown".

Yau*_*sau 5

[XmlIgnore]
public MyEnum EnumValueReal
{
    get { return _myEnum; }
    set { _myEnum = value; }
}

public string EnumValue
{
     get
     {
         return EnumValueReal.ToString();
     }

     set
     {
         MyEnum result = MyEnum.Unknown;
         Enum.TryParse(value, true, out result);

         EnumValueReal = result;
     }
}
Run Code Online (Sandbox Code Playgroud)