Как десериализовать XML с одинаковым именем атрибута в 2 разных элементах? - PullRequest
1 голос
/ 31 октября 2011

Определение моего класса:

[Serializable]
public class MyClass
{
    [XmlAttribute(AttributeName = "ID")] //Problem is here. same attr name ID.
    public int XXX_ID { get; set; }

    [XmlElement(ElementName = "XXX")]
    public string XXX_Value{ get; set; }

    [XmlAttribute(AttributeName = "ID")] //Problem is here. same attr name ID.
    public int YYY_ID { get; set; }

    [XmlElement(ElementName = "YYY")]
    public string YYY_Value { get; set; }
}

Мой XML:

<MyClass>
    <XXX ID="123">Some Values</XXX> 
    <YYY ID="567">Some Values</YYY>
</MyClass>

Моя проблема:

Я хочу десериализовать вышеуказанный XML в объект.

Во время выполнения произошла ошибка, недопустимо иметь одинаковое имя атрибута в 2 разных элементах и ​​под одним и тем же корнем.

Как решить эту проблему?

P / S: Я не могу изменить XML, я не являюсь его владельцем.

Заранее спасибо.

1 Ответ

2 голосов
/ 31 октября 2011

Для этого вам нужно либо выполнить (де) сериализацию вручную, либо вам нужно, чтобы DTO имел примерно ту же компоновку, что и xml. Например:

public class Something { // need a name here to represent what this is!
    [XmlAttribute] public int ID {get;set;}
    [XmlText] public string Value {get;set;}
}

тогда

public class MyClass {
    public Something XXX {get;set;}
    public Something YYY {get;set;}
}
...