c# – XmlSerializer – 如何在反序列化枚举时设置默认值?

我有一个看起来像这样的课程(大大简化):

public class Foo
{
    public enum Value
    {
        ValueOne,
        ValueTwo
    }

    [XmlAttribute]
    public Value Bar { get; set; }
}

我从外部源接收XML文件.他们的文档说明Foo元素在Bar属性中只有“ValueOne”或“ValueTwo”(它们不提供XSD).

所以,我这样反序列化:

 var serializer = new XmlSerializer(typeof(Foo));
 var xml = "<Foo Bar=\"ValueTwo\" />";
 var reader = new StringReader(xml);

 var foo = (Foo)serializer.Deserialize(reader);

……这一切都有效.

然而,昨晚,他们给我发了一些看起来像这样的XML,而我的反序列化失败了(应该这样):< Foo Bar =“”/>

有没有一种很好的方法可以围绕这个进行防御性编码?理想情况下,我想说“默认为ValueOne,如果出现问题”.我不想丢弃整个XML文件,因为单个属性被破坏了.

解决方法:

你可以设置这样的枚举,所以这会将enum的值设置为Unknown = 0,有点像默认值

public enum Foo
{
   [XmlEnum(Name = "")]
   Unknown =0,
   [XmlEnum(Name = "Single")]
   One,
   [XmlEnum(Name = "Double")]
   Two   
}

更多细节检查:XmlEnumAttribute Class

上一篇:5种高大上的yml文件读取方式,你知道吗?


下一篇:day8 AI面试刷题