c# - 将数组的数组序列化为单个 XML 元素

标签 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 会按我需要的方式序列化吗?

最佳答案

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

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

关于c# - 将数组的数组序列化为单个 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957583/

相关文章:

java - 在 Spring MVC 中使用 JAXB 注释与 Jackson 反序列化问题

c# - 如何在带有 ReactiveUI 和 Xamarin Forms 的 ListView ItemTemplate 中使用 ViewModelViewHost?

c# - CSharpCodeProvider 在编译期间使用自定义参数

java - 将 XML 转换为 Java 配置

java - 使用ObjectMapper转换为Json时,如何将POJO的String变量转换为Integer?

java - 使用 GSON 反序列化多个内部类

c# - 从 linq 语句中调用函数

c# - Visual Studio 2015 不显示项目文件夹内容

Android: ListView 的布局问题

javascript - xml 到 json 映射挑战