Search code examples
c#xml-serializationprimitivederived-class

XMLSerialization: The type of the argument object 'Sw' is not primitive


I'm trying to serialize an object to an XML file, but am getting the above error.

The problem seems to be with objects that contain a list of a base class but is populated by objects derived from the base class.

Example code is as follows:

public class myObject
{
    public myObject()
    {
        this.list.Add(new Sw());
    }

    public List<Units> list = new List<Units>();
}

public class Units
{
    public Units()
    {
    }
}

public class Sw : Units
{
    public Sw();
    {
    }

    public void main()
    {
        myObject myObject = new myObject();
        XmlSerializer serializer = new XmlSerializer(typeof(myObject));
        TextWriter textWriter = new StreamWriter ("file.xml");
        serializer.Serialize (textWriter, myObject);
    }

E.g. an object that contains only a List<Units> which is populated by derived objects which inherit from the Units class (Sw).

Sorry for not providing my actual code but the objects involved are quite complex and this seems to be the only part of the object which wont successfully be serialized - and only when the list contains the derived classes.

How can I correctly serialize a class like this?


Solution

  • Mark Units class with XmlInclude attribute passing your derived class as parameter:

    [XmlInclude(typeof(Sw))]
    public class Units
    {
        public Units()
        {
        }
    }