我有一个看起来像这样的类(高度简化):
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 文件,因为单个属性被破坏了。