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?
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; }
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.