Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to serialize xml array AND class properties using C# XML serialization

I have a class that is inherited from List<T> and also has some properties, like this:

[Serializable]
public class DropList : List<DropItem>
{
    [XmlAttribute]
    public int FinalDropCount{get; set;}
}

This class is serialized to xml as part of a larger class:

[Serializable]
public class Location
{
    public DropList DropList{get; set;}
    ....
}

The problem is, serializer sees my list as a collection; the resulting XML contians only list elements, but not class properties (FinalDropCount in this case). This is an example of outputted XML:

<Location xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <DropList>
        <DropItem ProtoId="3" Count="0" Minimum="0" Maximum="0" />
        <DropItem ProtoId="4" Count="0" Minimum="0" Maximum="0" />
    </DropList>
    ....
</Location>

Is there some way to save both list contents and properties without resorting to implementing IXmlSerializable by hand?

like image 420
Nevermind Avatar asked Mar 13 '26 10:03

Nevermind


1 Answers

You have other alternatives that you can consider.

Alternative one - Move to composition instead of inheritance:

public class DropInfo
{
    [XmlArray("Drops")]
    [XmlArrayItem("DropItem")]
    public List<DropItem> Items { get; set; }

    [XmlAttribute]
    public int FinalDropCount { get; set; }
}

public class Location
{
    public DropInfo DropInfo { get; set; }
}

Alternative two - Move the properties outside the collection:

public class DropList : List<DropItem>
{
}

public class Location
{
    public DropList DropList { get; set; }

    [XmlAttribute]
    public int FinalDropCount { get; set; }
}
like image 85
João Angelo Avatar answered Mar 15 '26 00:03

João Angelo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!