我有一个看起来像这样的课程(大大简化):
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