C# xml serializer - serialize derived objects

Posted by gln on Stack Overflow See other posts from Stack Overflow or by gln
Published on 2011-02-01T07:17:41Z Indexed on 2011/02/01 7:25 UTC
Read the original article Hit count: 164

Filed under:
|
|

Hi,

I want to serialize the following:

[Serializable]
[DefaultPropertyAttribute("Name")]
[XmlInclude(typeof(ItemInfo))]
[XmlInclude(typeof(ItemInfoA))]
[XmlInclude(typeof(ItemInfoB))] 
public class ItemInfo
{
    private string name;

    [XmlArray("Items"), XmlArrayItem(typeof(ItemInfo))]
    private ArrayList arr;

    private ItemInfo parentItemInfo;
}

[Serializable]
[XmlInclude(typeof(ItemInfo))]
[XmlInclude(typeof(ItemInfoA))]
[XmlInclude(typeof(ItemInfoB))] 
public class ItemInfoA : ItemInfo
{
...
}

[Serializable]
[XmlInclude(typeof(ItemInfo))]
[XmlInclude(typeof(ItemInfoA))]
[XmlInclude(typeof(ItemInfoB))] 
public class ItemInfoB : ItemInfo
{
...
}

The class itemInfo describes a container which can hold other itemInfo objects in the array list, the parentItemInfo describes which is the parent container of the item info.

Since ItemInfoA and ItemInfoB derive from ItemInfo they can also be a member of the array list and the parentItemInfo, therefore when trying to serialize these objects (which can hold many objects in hierarchy) it fails with exception

can't generate the xml file - innerexception.

My question is:

What attributes do I need to add the ItemInfo class so it will be serializable?

Note: the exception is only when the ItemInfo[A]/[B] are initialized with parentItemInfo or the arrayList.

Help please!

Thanks!

© Stack Overflow or respective owner

Related posts about c#

Related posts about serialization