1

I'm trying to serialize xml to object, but after serializing my list of transport-agreements is empty. I pretty sure this is quite easy, but i cant find my error.

I have the following 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>

And i have the following code:

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

And my classes:

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

    }
sindrem
  • 1,211
  • 5
  • 24
  • 45

3 Answers3

3

You can use some of on-line converters, which will give you full classes diagram. My fave is: this one

Maciej S.
  • 752
  • 10
  • 22
2
[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
}
Alexander Petrov
  • 13,457
  • 2
  • 20
  • 49
-1

I Changed XmlArray to XmlElement. The Array would add a extra tag which you don't have in the xml file.

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

    public class TransportAgreementRoot
    {
        [XmlElement("transport-agreement")]
        TransportAgreement[] TransportAgreements { get; set; }
    }
jdweng
  • 33,250
  • 2
  • 15
  • 20