使用XmlAttribute

时间:2017-08-29 08:38:23

标签: c# xml-parsing

我们的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 类编写自定义反序列化吗?

1 个答案:

答案 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的一部分。此外,我不能宣称两者中只有一个必须存在。