You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#:XML反序列化后生成数组嵌套格式JSON的方法

解决XML反序列化与JSON二维数组序列化兼容问题

方案思路

保留原有的类结构以保证XmlSerializer能正确反序列化目标XML,同时通过自定义Newtonsoft.Json转换器,将DataRow对象直接序列化为字符串数组,从而让data字段输出为二维数组格式。

实现步骤

1. 保留原有类结构(保证XML反序列化正常)

原有的Table和DataRow类无需大幅修改,仅需为DataRow添加自定义转换器标记:

[XmlRoot("table")]
public class Table
{
    [XmlElement("name")]
    public string Name { get; set; }

    [XmlArray("headers"), XmlArrayItem("header")]
    public List<string> Headers { get; set; } = new List<string>();

    [XmlArray("data"), XmlArrayItem("row")]
    public List<DataRow> Data { get; set; } = new List<DataRow>();
}

// 为DataRow添加JSON转换器
[JsonConverter(typeof(DataRowConverter))]
public class DataRow
{
    [XmlElement("row_item")]
    public List<string> DataRowItems { get; set; }
}

2. 实现自定义JSON转换器

创建DataRowConverter类,重写序列化逻辑,直接输出DataRowItems的数组:

public class DataRowConverter : JsonConverter<DataRow>
{
    // 序列化:将DataRow直接转为字符串数组
    public override void WriteJson(JsonWriter writer, DataRow value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value.DataRowItems);
    }

    // 反序列化(可选,若需从JSON转回对象则实现)
    public override DataRow ReadJson(JsonReader reader, Type objectType, DataRow existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var items = serializer.Deserialize<List<string>>(reader);
        return new DataRow { DataRowItems = items };
    }
}

3. 执行JSON序列化

使用Newtonsoft.Json进行序列化时,转换器会自动生效:

// 假设已完成XML反序列化得到table对象
Table table = ...;

// 序列化JSON
string json = JsonConvert.SerializeObject(new { table = new[] { table } }, Formatting.Indented);

效果验证

序列化后的JSON将符合需求,data字段为二维数组格式:

{
  "table": [
    {
      "name": "Table 1",
      "headers": [
        "Header 1",
        "Header 2"
      ],
      "data": [
        [
          "Item 1",
          "Item 2"
        ],
        [
          "Item 3",
          "Item 4"
        ]
      ]
    }
  ]
}

同时,原有的XML反序列化逻辑不受任何影响,依然能正确解析给定的XML结构。


内容的提问来源于stack exchange,提问作者Ryan Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:52:51