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

C# .NET Core中如何使用System.Text.Json将字符串转换为对象

解析失败原因
  • 原始请求字符串存在HTML转义字符:你拿到的内容里"是双引号的HTML编码格式,需要先解码才能正常解析。
  • JSON格式不符合标准规范:Abc字段的字符串值用单引号'包裹,System.Text.Json默认严格遵循JSON标准,不支持单引号作为字符串边界,和Newtonsoft.Json的默认宽松策略不同。
  • Abc字段存储的是序列化后的JSON字符串,不是直接嵌套对象,需要二次反序列化才能得到对应实体。
解决步骤

1. 预处理原始请求字符串

先对原始请求做HTML解码,消除"这类转义字符:

string rawRequest = "你拿到的原始请求字符串";
string decodedJson = System.Net.WebUtility.HtmlDecode(rawRequest);

2. 定义对应实体类

分别定义外层容器类和Abc对应的内层实体类:

// 外层容器实体
public class RootClass
{
    public string Abc { get; set; }
}

// Abc字段对应的内层实体
public class AbcContent
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

3. 配置反序列化参数并执行解析

开启单引号支持,按需开启忽略属性大小写适配不同命名格式:

var jsonOptions = new JsonSerializerOptions
{
    // 允许单引号包裹字符串
    AllowSingleQuotes = true,
    // 忽略属性名大小写,适配示例中property2小写的场景,不需要可以关闭
    PropertyNameCaseInsensitive = true
};

// 第一步反序列化外层对象
var root = JsonSerializer.Deserialize<RootClass>(decodedJson, jsonOptions);
// 第二步反序列化Abc字段的字符串内容为内层对象
var abcContent = JsonSerializer.Deserialize<AbcContent>(root.Abc, jsonOptions);
进阶优化方案

如果不想每次手动执行二次反序列化,可以自定义JsonConverter实现自动解析:

// 通用嵌套JSON字符串转换器
public class NestedJsonConverter<T> : JsonConverter<T>
{
    public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var nestedJson = reader.GetString();
        return JsonSerializer.Deserialize<T>(nestedJson, options);
    }

    public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(JsonSerializer.Serialize(value, options));
    }
}

修改外层实体类的属性标记,直接指定转换器:

public class RootClass
{
    [JsonConverter(typeof(NestedJsonConverter<AbcContent>))]
    public AbcContent Abc { get; set; }
}

配置完成后直接一次反序列化即可得到完整对象:

var result = JsonSerializer.Deserialize<RootClass>(decodedJson, jsonOptions);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:30:03