Преобразование xml в список путем десериализации на c#

#c#

#c#

Вопрос:

у меня есть XML-файл, и я пытаюсь заполнить свой список данными с помощью десериализации.

мой 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>
  

здесь я привожу свой полный код. я просто не понимаю, почему мой код не работает…чего не хватает в моем code……it не выдает ошибку, но список не заполняется. итак, пожалуйста, скажите мне, какую область мне нужно исправить в коде.

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

вот мой код десириализации

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

пожалуйста, помогите……

Комментарии:

1. Не могли бы вы, пожалуйста, повторно отредактировать свой XML-файл?

Ответ №1:

Это должно сработать:

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

И полный пример:

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

Комментарии:

1. сделайте мне одолжение еще раз, если в xml будут данные типа decimal или datetime, и если несколько данных типа date или decimal будут равны null, то как я могу обрабатывать null во время десериализации. пожалуйста, обсудите.

Ответ №2:

Читаемый код для преобразования xml в список

  string xmlString = System.IO.File.ReadAllText(@"C:UsersuserDownloadsuserDetail.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;
        }