我有一个字段:
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
会按照我需要的方式序列化吗?
答案 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应如何编写(格式化)。