我们的XML格式已从
更改<foo bar="xyz" />
到
<foo abc="xyz" />
。请注意属性名称从 bar 更改为 abc 。
是否可以使用XmlAttribute
支持两个属性名称?
我尝试用XmlAttribute
标记类成员两次,但这会导致编译时错误。
public sealed class Foo {
[XmlAttribute("bar")] // Error: The attribute `System.Xml.Serialization.XmlAttributeAttribute' cannot be applied multiple times
[XmlAttribute("abc")]
public string bar;
}
知道如何处理同义词属性名称而不为整个 Foo 类编写自定义反序列化吗?
答案 0 :(得分:0)
找到了一种吸气剂的方法,但这不是最好的解决方案:
public sealed class Foo {
// Both have to be public, otherwise they don't get deserialized
[XmlAttribute("bar"), DefaultValue(null)]
public string _bar;
[XmlAttribute("abc"), DefaultValue(null)]
public string _abc;
public string bar {
get {
if (_bar != null) {
return _bar;
} else {
return _abc;
}
}
}
}
缺点是,_bar
和_abc
现在都是 Foo 的公共API的一部分。此外,我不能宣称两者中只有一个必须存在。