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

如何使用System.Text.Json序列化预编码的字面量JSON值?

你可以通过修改自定义JsonConverter,调用Utf8JsonWriter的WriteRawValue方法实现需求,该方法从.NET 5开始原生支持,无需解析预编码JSON字符串,直接将内容作为合法JSON片段写入输出流,完全不会额外转义。

步骤1:修改自定义JsonConverter

public class LiteralJsonConverter : JsonConverter<string>
{
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        => reader.GetString();

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        // 处理null值场景,若业务保证OtherStuff不会为null可省略该判断
        if (value == null)
        {
            writer.WriteNullValue();
            return;
        }
        // 直接写入原始JSON片段,第二个参数传true表示跳过输入合法性校验(你已提前验证JSON合法时使用,可提升性能)
        writer.WriteRawValue(value, skipInputValidation: true);
    }
}

步骤2:给目标属性标记Converter特性

public class Foo 
{
    public string Name { get; set; }
    [JsonConverter(typeof(LiteralJsonConverter))]
    public string OtherStuff { get; set; }
}

效果验证

假设OtherStuff的取值为预编码JSON {"id":123,"content":"测试内容"},序列化后的最终输出为:

{
  "Name": "你的Name属性值",
  "OtherStuff": {"id":123,"content":"测试内容"}
}

不会出现任何转义字符,也没有额外的JSON解析/序列化开销。


.NET 5以下版本兼容方案

如果你使用的是不支持WriteRawValue的低版本.NET,也可以将OtherStuff属性类型改为JsonDocument,赋值时调用JsonDocument.Parse(预编码JSON字符串)即可,该方案会产生少量JSON解析开销,但不需要你感知内部结构,序列化时也会原样输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03