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

.NET中错误嵌套JSON的修正与反序列化实现方法

修复格式错误的JSON并反序列化为ReturnObject列表(C# .NET)

问题场景

你获取到的JSON响应存在多层格式问题:首尾被额外的数组括号和双引号包裹,内部JSON还存在过度转义。示例如下:

string JsonOutput = "[\n  \" [{\\\"return_type\\\":\\\"FIELD_LIST\\\",\\\"return_value\\\":[{\\\"fieldname\\\":\\\"INVOICE #\\\",...]}]\n]\n";

预期的正确JSON格式应为:

[{"return_type":"FIELD_LIST","return_value":[{"fieldname":"INVOICE #",...]}]

对应的C#实体类定义:

public class ReturnValue
{
    public string fieldname { get; set; }
    public string fieldvalue { get; set; }
    public string startoffset { get; set; }
    public string endoffset { get; set; }
}

public class ReturnObject
{
    public string return_type { get; set; }
    public List<ReturnValue> return_value { get; set; }
}

解决方案

步骤1:清理错误的JSON字符串

需要逐层剥离无效包裹并修正转义:

  1. 移除首尾的空白字符(包括换行符)
  2. 去掉最外层的数组括号[和]
  3. 移除内部包裹的首尾双引号
  4. 替换过度转义的字符(将\\\"替换为\")

代码实现:

string rawJson = "[\n  \" [{\\\"return_type\\\":\\\"FIELD_LIST\\\",\\\"return_value\\\":[{\\\"fieldname\\\":\\\"INVOICE #\\\",\\\"fieldvalue\\\":\\\"12345\\\",\\\"startoffset\\\":\\\"0\\\",\\\"endoffset\\\":\\\"10\\\"}]}]\n]\n";

// 1. 移除首尾空白和换行
string trimmed = rawJson.Trim();
// 2. 去掉最外层的数组括号
string withoutOuterArray = trimmed.Substring(1, trimmed.Length - 2);
// 3. 移除首尾引号并修正转义
string cleanedJson = withoutOuterArray.Trim('"').Replace(@"\""", @"""");

步骤2:反序列化为ReturnObject列表

可以使用.NET内置的System.Text.Json或第三方库Newtonsoft.Json完成反序列化:

方式一:使用System.Text.Json(.NET Core 3.0+内置)

using System.Text.Json;

var returnObjects = JsonSerializer.Deserialize<List<ReturnObject>>(cleanedJson);

方式二:使用Newtonsoft.Json(Json.NET)

需先通过NuGet安装Newtonsoft.Json包,再执行:

using Newtonsoft.Json;

var returnObjects = JsonConvert.DeserializeObject<List<ReturnObject>>(cleanedJson);

完整可运行示例

using System;
using System.Collections.Generic;
using System.Text.Json;

public class ReturnValue
{
    public string fieldname { get; set; }
    public string fieldvalue { get; set; }
    public string startoffset { get; set; }
    public string endoffset { get; set; }
}

public class ReturnObject
{
    public string return_type { get; set; }
    public List<ReturnValue> return_value { get; set; }
}

class Program
{
    static void Main()
    {
        string rawJson = "[\n  \" [{\\\"return_type\\\":\\\"FIELD_LIST\\\",\\\"return_value\\\":[{\\\"fieldname\\\":\\\"INVOICE #\\\",\\\"fieldvalue\\\":\\\"12345\\\",\\\"startoffset\\\":\\\"0\\\",\\\"endoffset\\\":\\\"10\\\"}]}]\n]\n";
        
        // 清理JSON字符串
        string trimmed = rawJson.Trim();
        string withoutOuterArray = trimmed.Substring(1, trimmed.Length - 2);
        string cleanedJson = withoutOuterArray.Trim('"').Replace(@"\""", @"""");
        
        // 反序列化
        var returnObjects = JsonSerializer.Deserialize<List<ReturnObject>>(cleanedJson);
        
        // 验证输出
        if (returnObjects != null && returnObjects.Count > 0)
        {
            Console.WriteLine($"返回类型:{returnObjects[0].return_type}");
            foreach (var val in returnObjects[0].return_value)
            {
                Console.WriteLine($"字段名:{val.fieldname},字段值:{val.fieldvalue}");
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:48:10