Search code examples
c#.netxml-deserialization

Deserialize and get xml having 2 attributes with different ID


I want to Deserialize and get values of 2 attributes with different ID.

<Attributes><AddressAttribute ID="18"><AddressAttributeValue><Value>Sala 305</Value></AddressAttributeValue></AddressAttribute><AddressAttribute ID="17"><AddressAttributeValue><Value>3434</Value></AddressAttributeValue></AddressAttribute></Attributes>

I treid this C# code but it only returns the 1st attribute. please help

[XmlRoot(ElementName = "AddressAttributeValue")]

public class AddressAttributeValue
{
    [XmlElement(ElementName = "Value")]

    public string Value { get; set; }

}

[XmlRoot(ElementName = "AddressAttribute")]

public class AddressAttribute
{
    [XmlElement(ElementName = "AddressAttributeValue")]

    public AddressAttributeValue AddressAttributeValue { get; set; }

    [XmlAttribute(AttributeName = "ID")]

    public string ID { get; set; }

}

[XmlRoot(ElementName = "Attributes")]

public class Attributes

{
    [XmlElement(ElementName = "AddressAttribute")]

    public AddressAttribute AddressAttribute { get; set; }

}

 var xmlData= customer.BillingAddress.CustomAttributes;
        XmlSerializer serializer = new XmlSerializer(typeof(Attributes));
        Attributes data;
        using (TextReader reader = new StringReader(xmlData))
        {
            data = (Attributes)serializer.Deserialize(reader);
        }

Should I change classes of Deserialize logic???


Solution

  • Sometimes using Linq instead of xml serialization can be simpler

    var list = XDocument.Parse(xmlstring).Descendants("AddressAttribute")
            .Select(x => new
            {
                Id = (int)x.Attribute("ID"),
                Value = (string)x.Element("AddressAttributeValue").Element("Value")
            })
            .ToList();