2016-05-12 12 views
1

深くネストされたxmlのオブジェクトを逆シリアル化しようとしています。複合オブジェクトの逆シリアル化C#

は、ここでのXMLコードです:

<modules> 
    <channel> 
     <resources> 
     <resource name="x" refresh_interval="180">... text ...</resource> 
     <resource name="y" refresh_interval="180">..text..</resource> 
     <resource name="z" refresh_interval="180">... text ...</resource> 
     </resources> 
    </channel> 
</modules> 

私は、モジュールノード内のチャネルのような多くの要素を持っていますが、例えば、この1は十分に私が期待しています。 は、その後、私は私のクラスを持っている:

public class IdentifyData{ 

    public Modules modules; 
} 

public class Modules 
{ 
    public List<Resources> channels; 
} 

    public class Resources 
    { 
     [DataMember(Name = "name")] 
     public string name { get; set; } 

     [DataMember(Name ="url")] 
     public string url { get; set; } 

     [DataMember(Name = "refresh_interval")] 
     public string refresh_interval { get; set; } 
    } 

私はXmlArrayとすべてにしようと、それだけで動作するように望んでいない、そしてもちろん私は、すべてのスタックオーバーフローの上に検索し、私は正しい答えを見つけることができませんでした。

+0

は、モジュールのルート要素です あなたは、さらにその画像とチャンネルを継承ベースクラスを使用して、このクラスの構造、およびその他の属性のカップルを簡素化することができ?モジュールの下に複数のチャンネル要素が許されていますか? – Zee

+0

テキスト <リソース名=「ホーム<リソース名= "変換">テキスト <= "180" リソース名= "リスト" REFRESH_INTERVAL> "refresh_interval =" 180 "> text t これは私がAPIから手に入れたもので、1チャンネルだけではありません –

+0

あなたの質問は何ですか? –

答えて

0

レスポンス内に複数のモジュールがなく、モジュール内に複数の画像やチャンネルがない場合、次のクラスが役に立ちます。このようにそれをデシリアライズその後

[Serializable] 
[XmlRoot("response")] 
public class IdentifyData 
{ 
    [XmlElement("modules")] 
    public Modules modules { get; set; } 
} 

[Serializable] 
public class Modules 
{ 
    [XmlElement] 
    public Channel channel { get; set; } 
    [XmlElement] 
    public Image image { get; set; } 
} 
[Serializable] 
public class Image 
{ 
    [XmlArray("resources")] 
    [XmlArrayItem("resource")] 
    public List<Resources> resources { get; set; } 

} 

[Serializable] 
public class Channel 
{ 
    [XmlArray("resources")] 
    [XmlArrayItem("resource")] 
    public List<Resources> resources { get; set; } 
} 

[Serializable] 
public class Resources 
{ 
    [XmlAttribute] 
    public string name { get; set; } 

    [XmlAttribute] 
    public string url { get; set; } 

    [XmlAttribute] 
    public string refresh_interval { get; set; } 

    [XmlText] 
    public string someText { get; set; } 
} 

using (var sr = new StreamReader("data.xml")) 
    { 
     var xs = new XmlSerializer(typeof(IdentifyData)); 
     var responseData = (IdentifyData)xs.Deserialize(sr); 
     Console.WriteLine("Got {0} channel resources", responseData.modules.channel.resources.Count); 
    } 
+0

ありがとう、これは解決策です:D Thanks a lot:D –

関連する問題