2016-07-11 1 views
0

J'essaie de sérialiser xml en objet, mais après la sérialisation, ma liste d'accords de transport est vide. Je suis sûr que c'est assez facile, mais je ne peux pas trouver mon erreur.Désérialise XML en objet C#

je le code XML suivant

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

Et j'ai le code suivant:

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

Et mes cours:

[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

Avez-vous essayé de changer 'var transportAgreements = (TransportAgreementRoot) serializer.Deserialize (resultContent),' 'à (TransportAgreement []) serializer.Deserialize (resultContent)' –

+1

êtes-vous de sérialisation ou désérialiser ...? –

+0

pls ont regarder ce http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document –

Répondre

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

Merci! Ça marche! – sindrem

-1

I Changed XmlArray à XmlElement. Le tableau ajouterait un tag supplémentaire que vous n'avez pas dans le fichier xml.

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

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

Salut! Le tableau des éléments de transport est toujours vide après le passage à l'élément – sindrem

1

Vous pouvez utiliser certains des convertisseurs en ligne, ce qui vous donnera un diagramme de classes complètes. Mon Fave est: this one

+0

Ceci devrait être un commentaire – dotNET