2016-07-13 5 views
0

を取得した属性を持つXMLを解析するために、サンプル構造この試してみる私はXMLをシリアル化しようとしていた空の配列

よう
<nodes> 
    <node1>87576</node1> 
    <node2>10</node2> 
    <crsa> 
     <crsa x="0">3487</crsa> 
     <crsa x="1">0</crsa> 
     <crsa x="2">0</crsa> 
    </crsa> 
    <node3>0</node3> 
    <node4>131</node4> 
</nodes> 

これは、生成されたクラスです。私はクラスにXMLをシリアル化するとき

[XmlRoot(ElementName = "nodes")] 
public class Nodes 
{ 
    [XmlElement(ElementName = "node1")] 
    public string node1 { get; set; } 
    [XmlElement(ElementName = "node2")] 
    public string node2 { get; set; } 
    [XmlElement(ElementName = "node3")] 
    public string node3 { get; set; } 
    [XmlElement(ElementName = "crsa")] 
    public Crsa[] crsa { get; set; } 
    [XmlElement(ElementName = "node4")] 
    public string node4 { get; set; } 
} 

[XmlRoot(ElementName = "crsa")] 
public class Crsa 
{ 
    [XmlAttribute("x")] 
    public string X { get; set; } 
    [XmlText] 
    public string Text { get; set; } 
} 

crsa配列値は空になっています。他のノード値は正しくシリアル化されます。 http://xmltocsharp.azurewebsites.net/を使用してクラスを生成したとき、Crsaは配列public Crsa crsa { get; set; }ではありません。私は両方を試しましたが、値が空になっています。

+1

これは本当にあなたが作業しなければならないXMLですか? 'crsa'要素には、コンテナと含まれるアイテムの2つの全く異なる役割が与えられているようです。 –

+0

@Damienはい、ノード名は同じです。コンテナとその付属品の問題は何ですか? – Sreejith

+0

*具体的な問題はありません。それは、私はそれがツールをトリッピングしているこの側面だと思うことがわかります。 –

答えて

1

<crsa>ノードには、同じ名前の外部要素と内部要素の両方があります。このように、外側のコンテナ要素を使用してCrsa[]コレクションをシリアル化するためには、あなたが[XmlArray]の代わり[XmlElement]crsaプロパティを飾るために必要があります。

[XmlRoot(ElementName = "nodes")] 
public class Nodes 
{ 
    [XmlElement(ElementName = "node1")] 
    public string node1 { get; set; } 
    [XmlElement(ElementName = "node2")] 
    public string node2 { get; set; } 
    [XmlElement(ElementName = "node3")] 
    public string node3 { get; set; } 

    [XmlArray("crsa")] 
    [XmlArrayItem("crsa")] 
    public Crsa[] crsa { get; set; } 

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

インナー[XmlArrayItem]属性は、ネストされた要素の名前を設定します。

サンプルfiddle

+0

これは問題を解決します。 – Sreejith

関連する問題