序列化数组的元素但不是数组(XMLSerizlization)

时间:2011-09-14 00:22:40

标签: c# xml-serialization

我有一个简单的数组,我需要将其序列化为更大的对象的一部分。

public class Holder
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Thing[] Thingies { get; set; }
}

public class Thing {}

通常这会被序列化为:

...
<Holder>
    <ID>...</ID>
    <Name>...</Name>
    <ArrayOfThing>
        <Thing>...</Thing>
        <Thing>...</Thing>
        <Thing>...</Thing>
        ...
    </ArrayOfThing>
</Holder>

不要过多担心反序列化,有没有办法可以简单地删除ArrayOf元素,但保留元素,以便我有:

...
<Holder>
    <ID>...</ID>
    <Name>...</Name>
    <Thing>...</Thing>
    <Thing>...</Thing>
    <Thing>...</Thing>
    ...
</Holder>

3 个答案:

答案 0 :(得分:1)

尝试

public class Holder
{
    public int ID { get; set; }
    public string Name { get; set; }

    [XmlElement("Thing")]
    public Thing[] Thingies { get; set; }
}

MSDN for XmlElementAttribute也有一些例子。

答案 1 :(得分:0)

您可以实现IXmlSerializable,以便从包含XML元素中读取和写入Thing或其他子元素。

以下是如何实施此Proper way to implement IXmlSerializable?

答案 2 :(得分:0)

使用[XmlElement]属性:

[XmlElement]
public Thing[] Thingies { get; set; }