C# 将数组数组序列化为单个XML元素
我有一个领域:C# 将数组数组序列化为单个XML元素,c#,xml,serialization,C#,Xml,Serialization,我有一个领域: public Field[][] fields; 我想要一个XML: <Fields> <Field x="0" y="0"> ... </Field> <Field x="0" y="1"> ... </Field> ... </Fields> ... ... ... 不幸的是,C#XmlSerializer给了我 <Fiel
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>
.... 这里有些田地
.... 这里有些
...
我如何做到这一点
实际上,我不需要坚持使用数组。这些字段确实表示二维空间,因此这是一种自然选择。一个
字典
会按照我需要的方式序列化吗?我认为您需要实现IXmlSerializable接口:
然后,您可以在
WriteXml()
方法中指定xml的写入(格式化)方式。您可以创建一个属性,在数组数组和单个数组之间进行转换:
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();
}
}
}
使用System.Linq;
...
[XmlIgnore]
公共字段[][]字段;
[XmlArray(“字段”)]
公共字段[]序列化字段
{
得到
{
返回this.Fields.SelectMany(Fields=>Fields.ToArray();
}
设置
{
this.Fields=newfield[value.Max(Field=>Field.x)+1]];
for(int x=0;xfield.x==x.ToArray();
}
}
}
您能告诉我们x和y属性的填充位置吗。您可以使用xslt transform转换xml。我没有给出所有详细信息,x和y是Field
类的公共字段,并且映射到属性。字段
类序列化正常。我只是找不到一种方法来序列化二维数组,既不是多维数组,也不是交错数组。我考虑过这一点,但你会如何反序列化它..?请参阅我更新的答案。它假设了几件事:x
和y
属性与数组索引匹配;x
中可能存在间隙;对于给定的x
,y
中没有间隙(即,如果字段[9][3]
存在,那么字段[9][0]
,字段[9][1]
和字段[9][2]
也存在间隙);可以在每个数组的末尾删除未使用的元素。太好了。正是我需要的。