Search code examples
c#xmllist.net-corexml-deserialization

Convert from XML response to list


XElement Xml = null;
var apiResponse = response.Content.ReadAsStringAsync().Result;
Xml = Newtonsoft.Json.JsonConvert.DeserializeObject<XElement>(apiResponse);

XML response from the above code:

I'm having errors with Images XML part while converting it to List, I tried so many options, please provide suggestion below:

<root>
  <Column1>
    <ID>2702</ID>
    <Desc>Failed</Desc>
    <Address>Florida</Address>
    <Date>2019-04-30T23:10:36.79</Date>
    <Images>
      <Image>
        <File>1-RRamos.PNG</File>
      </Image>
      <Image>
        <File>RRamos.PNG</File>
      </Image>
      <Image>
        <File>3-RRamos.PNG</File>
      </Image>
    </Images>
  </Column1>
</root>

Trying to convert from XML to List as below:

public class objClass
{
    public string ID { get; set; }
    public string Desc { get; set; }
    public string Address { get; set; }
    public DateTime? Date { get; set; }

    //public string[] ImageFileNames { get; set; }

    public List<Images> FileName { get; set; }
}

public class Images
{
    public string File { get; set; }
}

List<objClass> list = Xml.Elements("ID").Select(sv => new objClass()
{
    ID = (string)sv.Element("ID"),
    Desc = (string)sv.Element("Desc"),
    Address = (string)sv.Element("Address"),
    Date = (DateTime?)sv.Element("Date"),
    //**,Images = (List)sv.Element("Images")**
}).ToList();

Solution

  • public class objClass
    {
        public string ID { get; set; }
        public string Desc { get; set; }
        public string Address { get; set; }
        public DateTime? Date { get; set; }
        public string[] ImageFileNames { get; set; }
    }
    
    var list = Xml.Elements("root").Elements("Column1")
    .Select(sv => new objClass()
    {
        ID = (string)sv.Element("ID"),
        Desc = (string)sv.Element("Desc"),
        Address = (string)sv.Element("Address"),
        Date = (DateTime?)sv.Element("Date"),
        ImageFileNames = sv.Element("Images")
            .Elements("Image")
            .Select(i => (string)i.Element("File"))
            .ToArray(),
    })
    .ToList();