2016-07-11 7 views
0

Ich versuche, XML zu Objekt zu serialisieren, aber nach der Serialisierung ist meine Liste der Transportvereinbarungen leer. Ich bin mir ziemlich sicher, dass das ziemlich einfach ist, aber ich kann meinen Fehler nicht finden.Deserialize XML zum Objekt C#

Ich habe folgende xml

<transport-agreements type="array"> 
    <transport-agreement> 
    <id type="integer">1047</id> 
    <description>Standard</description> 
    <products type="array"> 
     <product>not important</product> 
    </products> 
    </transport-agreement> 
    <transport-agreement> 
    <id type="integer">1048</id> 
    <description>Standard</description> 
    <products type="array"> 
     <product>not important</product> 
    </products> 
    </transport-agreement> 
</transport-agreements> 

Und ich habe den folgenden Code:

var resultContent = await response.Content.ReadAsStreamAsync(); 
var serializer = new XmlSerializer(typeof(TransportAgreementRoot)); 
var transportAgreements = (TransportAgreementRoot)serializer.Deserialize(resultContent); 

Und meine Klassen:

[Serializable, XmlRoot("transport-agreements")] 

    public class TransportAgreementRoot 
    { 
     [XmlArrayItem("transport-agreement")] 
     TransportAgreement[] TransportAgreements { get; set; }   
    } 

    public class TransportAgreement 
    { 
     [XmlElement("description")] 
     public string Description { get; set; } 
     [XmlElement("id")] 
     public int Id { get; set; } 
     [XmlElement("number")] 
     public string Number { get; set; } 
     [XmlElement("carrier")] 
     public Carrier Carrier { get; set; } 
     [XmlArray("products")] 
     [XmlArrayItem("product")] 
     public Product[] Products { get; set; } 

    } 
+0

Haben Sie versucht, zu ändern 'var transportAgreements = (TransportAgreementRoot) serializer.Deserialize (resultContent);' auf '(TransportAgreement []) serializer.Deserialize (resultContent)' –

+1

versuchen Sie zu serialisiert oder deserialisieren ...? –

+0

pls haben diese http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document –

Antwort

1
[XmlRoot("transport-agreements")] 
public class TransportAgreementRoot 
{ 
    [XmlElement("transport-agreement")] 
    public TransportAgreement[] TransportAgreements { get; set; } 
} 

[XmlRoot("transport-agreement")] 
public class TransportAgreement 
{ 
    [XmlElement("description")] 
    public string Description { get; set; } 
    [XmlElement("id")] 
    public int Id { get; set; } 
    // other properties 
} 
+0

Danke! Es klappt! – sindrem

-1

I Changed XmlArray zu XmlElement. Das Array würde ein zusätzliches Tag hinzufügen, das Sie nicht in der XML-Datei haben.

[Serializable, XmlRoot("transport-agreements")] 

    public class TransportAgreementRoot 
    { 
     [XmlElement("transport-agreement")] 
     TransportAgreement[] TransportAgreements { get; set; } 
    } 
+0

Hallo! Das Array der Transportvereinbarungen ist nach dem Wechsel zu Element – sindrem

1

Sie können einige der Online-Konverter verwenden, die Ihnen vollständige Klassen Diagramm geben. Mein fave ist: this one

+0

noch leer. Dies sollte ein Kommentar sein – dotNET