将数组数组序列化为单个XML元素

时间:2012-03-31 16:16:54

标签: c# xml serialization

我有一个字段:

public Field[][] fields;

我想要一个XML:

<Fields>
    <Field x="0" y="0">
       ...
    </Field>
    <Field x="0" y="1">
       ...
    </Field>
    ...
</Fields>

不幸的是,C#XmlSerializer给了我

<Fields>
    <ArrayOfField>
        .... some fields here
    </ArrayOfField>
    <ArrayOfField>
       .... some here
    </ArrayOfField>
            ...
</Fields>

我如何实现这一目标?


好吧,实际上我不需要坚持阵列数组。这些字段确实代表了2D空间,因此它是一个自然的选择。 Dictionary会按照我需要的方式序列化吗?

2 个答案:

答案 0 :(得分:2)

您可以创建一个在数组数组和单个数组之间进行转换的属性:

using System.Linq;

...

[XmlIgnore]
public Field[][] Fields;

[XmlArray("Fields")]
public Field[] SerializedFields
{
    get
    {
        return this.Fields.SelectMany(fields => fields).ToArray();
    }
    set
    {
        this.Fields = new Field[value.Max(field => field.x) + 1][];
        for (int x = 0; x < this.Fields.Length; x++)
        {
            this.Fields[x] = value.Where(field => field.x == x).ToArray();
        }
    }
}

答案 1 :(得分:1)

我认为你需要实现IXmlSerializable接口:http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

然后,您可以在WriteXml()方法中指定xml应如何编写(格式化)。