2016-07-13 3 views
0

Ich habe versucht, xml zu serialisiert, die Probenstruktur wie dieseWenn versuchen xml parsen mit Attributen leeres Array immer

<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> 

Dies ist die generierte Klasse ist.

[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; } 
} 

Wenn ich die xml in die Klasse serialisiert werden, die crsa Array-Werte werden immer leer. Die anderen Knotenwerte werden korrekt serialisiert. Wenn ich die Klasse mit http://xmltocsharp.azurewebsites.net/ generiert habe, ist Crsa kein Array public Crsa crsa { get; set; }. Ich habe es mit beiden versucht, aber die Werte werden leer.

+1

Ist das wirklich die XML, mit der Sie arbeiten müssen? Es scheint, dass das "crsa" -Element zwei völlig unterschiedliche Rollen hat, die gespielt werden müssen, sowohl der Container als auch der enthaltene Gegenstand. –

+0

@Damien Ja, der Knotenname war gleich. Was war das Problem im Container und im enthaltenen Artikel? – Sreejith

+0

Es gibt kein * spezifisches * Problem an sich. Es ist nur so, dass ich vermute, dass Sie feststellen werden, dass dieser Aspekt die Werkzeuge auslöst. –

Antwort

1

Die Knoten <crsa> haben sowohl ein äußeres Element als auch ein inneres Element (e) mit demselben Namen. Um Ihre Crsa[] Sammlung mit einem äußeren Containerelement auf diese Weise serialisiert werden, müssen Sie die crsa Eigenschaft mit [XmlArray] statt [XmlElement] dekorieren:

[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; } 
} 

Die innere [XmlArrayItem] Attribut legt den Namen der verschachtelten Elemente.

Beispiel fiddle.

+0

Großartig, das löst das Problem! – Sreejith