Mou
Mou

Reputation: 16282

Convert xml to List by Deserialize in c#

i have a xml file and i am trying to populate my list with the data through deserialization.

my xml is here

<?xml version="1.0" ?>
<CustomerQueryRs>
    <CustomerRet>
        <ListID>6BE0000-1159990808</ListID>
        <Name>+ Blaine Bailey</Name>
        <FullName>+ Blaine Bailey</FullName>
        <Phone>866-855-0800</Phone>
    </CustomerRet>
    <CustomerRet>
        <ListID>9BA0000-1165353294</ListID>
        <Name>+ Brian Boyd</Name>
        <FullName>+ Brian Boyd</FullName>
        <Phone>203-245-1877</Phone>
    </CustomerRet>
        <CustomerRet>
        <ListID>9280000-1164147562</ListID>
        <Name>+ Brian Leahy</Name>
        <FullName>+ Brian Leahy</FullName>
        <Phone>508-341-0955</Phone>
    </CustomerRet>
</CustomerQueryRs>

here i am giving my full code. i just do not understand why my code is not working...what is missing in my code......it is not giving error but list is not getting populated. so please tell me which area i need to rectify in code.

[XmlTypeAttribute(AnonymousType = true)]
public class CustomersData
{
    [XmlArray(ElementName = "CustomerQueryRs")]
    [XmlArrayItem(ElementName = "CustomerRet")]
    public List<Customer> Customers { get; set; }

    public CustomersData()
    {
        Customers = new List<Customer>();
    }

}

public class Customer
{
    [XmlElement(ElementName = "ListID")]
    public string ListID { get; set; }

    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "FullName")]
    public string FullName { get; set; }

    [XmlElement(ElementName = "Phone")]
    public string Phone { get; set; }
}

here is my desirialization code

private object DeserialzeXml(string xml)
    {
        var xmlSer = new XmlSerializer(typeof(CustomersData), new XmlRootAttribute("CustomerQueryRs"));
        var stringReader = new StringReader(xml);
        return xmlSer.Deserialize(stringReader);
    }

please help......

Upvotes: 6

Views: 23733

Answers (2)

Taja_100
Taja_100

Reputation: 449

An Readable code for converting xml to list

 string xmlString = System.IO.File.ReadAllText(@"C:\Users\user\Downloads\userDetail.xml");

 List<GridViewDetails> userDetail = (List<GridViewDetails>)ConvertXmlStringtoObject<List<GridViewDetails>>(xmlString);

  static T ConvertXmlStringtoObject<T>(string xmlString)
        {
            T classObject;

            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            using (StringReader stringReader = new StringReader(xmlString))
            {
                classObject = (T)xmlSerializer.Deserialize(stringReader);
            }
            return classObject;
        }

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1038730

This should work:

[XmlElement("CustomerRet")]
public List<Customer> Customers { get; set; }

And a full example:

[XmlTypeAttribute(AnonymousType = true)]
public class CustomersData
{
    [XmlElement("CustomerRet")]
    public List<Customer> Customers { get; set; }

    public CustomersData()
    {
        Customers = new List<Customer>();
    }
}

public class Customer
{
    [XmlElement(ElementName = "ListID")]
    public string ListID { get; set; }

    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "FullName")]
    public string FullName { get; set; }

    [XmlElement(ElementName = "Phone")]
    public string Phone { get; set; }
}

class Program
{
    static void Main()
    {
        var xml = 
@"<?xml version=""1.0"" ?>
<CustomerQueryRs>
  <CustomerRet>
    <ListID>6BE0000-1159990808</ListID>
    <Name>+ Blaine Bailey</Name>
    <FullName>+ Blaine Bailey</FullName>
    <Phone>866-855-0800</Phone>
  </CustomerRet>
  <CustomerRet>
    <ListID>9BA0000-1165353294</ListID>
    <Name>+ Brian Boyd</Name>
    <FullName>+ Brian Boyd</FullName>
    <Phone>203-245-1877</Phone>
  </CustomerRet>
  <CustomerRet>
    <ListID>9280000-1164147562</ListID>
    <Name>+ Brian Leahy</Name>
    <FullName>+ Brian Leahy</FullName>
    <Phone>508-341-0955</Phone>
  </CustomerRet>
</CustomerQueryRs>";
        var serializer = new XmlSerializer(typeof(CustomersData), new XmlRootAttribute("CustomerQueryRs"));
        using (var stringReader = new StringReader(xml))
        using (var reader = XmlReader.Create(stringReader))
        {
            var result = (CustomersData)serializer.Deserialize(reader);
            Console.WriteLine(result.Customers[1].FullName);
        }
    }
}

Upvotes: 12

Related Questions