2011-10-31 26 views
1

私のクラス定義:2つの異なる要素で同じ属性名を使用してXMLを逆シリアル化する方法

[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を変更できません。私はXMLの所有者ではありません。

ありがとうございます。

+0

注: '[Serializableを]は'ここに有用何もしません –

答えて

2

これを行うには、手動で(de)シリアライズを行うか、xmlとほぼ同じレイアウトを持つDTOが必要です。たとえば、次のように、その後

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;} 
} 
関連する問題