【发布时间】:2012-10-31 14:14:42
【问题描述】:
我有一个看起来像这样的类(高度简化):
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);
...一切正常。
然而,昨晚,他们向我发送了一些类似于 this 的 XML,而我的反序列化失败(应该如此):<Foo Bar="" />
有没有一种很好的方法来围绕这个进行防御性编码?理想情况下,我想说“如果这里出现问题,默认使用 ValueOne”。我不想丢弃整个 XML 文件,因为单个属性被破坏了。
【问题讨论】:
-
您可以尝试先从输入字符串创建一个 XML 对象,然后遍历节点并将所有空值替换为 ValueOne。
标签: c# xml-serialization xmlserializer defensive-programming