如何使用C#XML序列化序列化xml数组和类属性

时间:2010-02-24 12:00:50

标签: c# .net xml-serialization

我有一个继承自List<T>的类,并且还有一些属性,如下所示:

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

这个类被序列化为xml,作为更大类的一部分:

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

问题是,序列化程序将我的列表视为集合;生成的XML只包含列表元素,但不包括类属性(在本例中为FinalDropCount)。这是输出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>

是否有某种方法可以保存两个列表内容和属性而无需手动实施IXmlSerializable

1 个答案:

答案 0 :(得分:2)

您可以考虑其他替代方案。

备选方案 - 转移到合成而不是继承:

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; }
}

备选方案二 - 移动集合外的属性:

public class DropList : List<DropItem>
{
}

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

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