Ian
Ian

Reputation: 3

De-serialising XML into list yields empty list

I've been trying to de serialise an XML file into a list, but whatever I do, the list ends up with a count of 0.

I've been searching Stack like I normally do, tried all kinds of things, but am at my wit's end. What's going wrong here?

My XML:

<?xml version="1.0" encoding="utf-8"?>
<lijst>
  <lijst_item>
    <id>1</id>
    <naam>NAME REDACTED</naam>
    <archived>false</archived>
  </lijst_item>
  <lijst_item>
    <id>2</id>
    <naam>NAME REDACTED</naam>
    <archived>false</archived>
  </lijst_item>
  <lijst_item>
    <id>3</id>
    <naam>NAME REDACTED</naam>
    <archived>false</archived>
  </lijst_item>
</lijst>

Lijst_item object:

[XmlType("Lijst_item")]
public class Lijst_item
{
    [XmlAttribute("id", DataType = "int")]
    public int ID { get; set; }

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

    [XmlElement("archived", DataType ="boolean")]
    public bool isArchived { get; set; }

    public Lijst_item()
    {

    }

    public Lijst_item(int id, string name, bool archived)
    {
        this.ID = id;
        this.Name = name;
        this.isArchived = archived;
    }
}

Code used to de serialise:

using (StreamReader sr = new StreamReader(sFile))
{
    XmlSerializer deserializer = new XmlSerializer(typeof(List<Lijst_item>), new XmlRootAttribute("lijst"));
    var Test = (List<Lijst_item>)deserializer.Deserialize(sr);
}

Convert xml to List by Deserialize in c# Did not help me: Exactly what am I doing wrong? Is my XML malformed? My object? Can I for some reason not use a List?

Upvotes: 0

Views: 86

Answers (1)

User9995555
User9995555

Reputation: 1556

Try this...

Usings...

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

Classes...(created using your XML at http://xmltocsharp.azurewebsites.net/)

    [XmlRoot(ElementName = "lijst_item")]
    public class Lijst_item
    {
        [XmlElement(ElementName = "id")]
        public string Id { get; set; }
        [XmlElement(ElementName = "naam")]
        public string Naam { get; set; }
        [XmlElement(ElementName = "archived")]
        public string Archived { get; set; }
    }

    [XmlRoot(ElementName = "lijst")]
    public class Lijst
    {
        [XmlElement(ElementName = "lijst_item")]
        public List<Lijst_item> Lijst_item { get; set; }
    }

Code...

        string strXML = @"<?xml version=""1.0"" encoding=""utf-8""?>
                            <lijst>
                                <lijst_item>
                                    <id>1</id>
                                    <naam>NAME REDACTED</naam>
                                    <archived>false</archived>
                                </lijst_item>
                                <lijst_item>
                                    <id>2</id>
                                    <naam>NAME REDACTED</naam>
                                    <archived>false</archived>
                                </lijst_item>
                                <lijst_item>
                                    <id>3</id>
                                    <naam>NAME REDACTED</naam>
                                    <archived>false</archived>
                                </lijst_item>
                            </lijst>";

        byte[] bufXML = ASCIIEncoding.UTF8.GetBytes(strXML);
        MemoryStream ms1 = new MemoryStream(bufXML);

        // Deserialize to object
        XmlSerializer serializer = new XmlSerializer(typeof(Lijst));
        try
        {
            using (XmlReader reader = new XmlTextReader(ms1))
            {
                Lijst deserializedXML = (Lijst)serializer.Deserialize(reader);

            }// put a break point here and mouse-over Label1Text and Label2Text ….
        }
        catch (Exception ex)
        {
            throw;
        }

Upvotes: 1

Related Questions