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

使用JsonConvert序列化JsonObject格式不符,如何通过JsonSerializerSettings修正?

问题解答

不能仅通过配置JsonSerializerSettings解决这个问题,本质原因是你混用了两个不同的JSON处理库:

  • JsonConvert.SerializeObject是**Newtonsoft.Json(Json.NET)**的API
  • JsonObject是System.Text.Json库中的节点类型

Newtonsoft.Json无法识别System.Text.Json的JsonObject内部结构,会将其当作普通.NET对象序列化,因此输出了_value、Value这些内部属性。

解决方案一:使用System.Text.Json自带的序列化方法

既然你用的是System.Text.Json的JsonObject,直接用该库的JsonSerializer.Serialize方法即可得到简洁格式:

using System.Text.Json;
using System.Text.Json.Nodes;

var jsonString = JsonSerializer.Serialize(objx, new JsonSerializerOptions
{
    WriteIndented = false // 对应Newtonsoft的Formatting.None,需要缩进则设为true
});

解决方案二:为Newtonsoft.Json自定义转换器(如果必须用Newtonsoft)

如果因为某些原因必须使用Newtonsoft.Json,可以编写自定义转换器来正确处理JsonObject,然后添加到JsonSerializerSettings中:

首先定义转换器:

using Newtonsoft.Json;
using System.Text.Json.Nodes;

public class JsonObjectConverter : JsonConverter<JsonObject>
{
    public override JsonObject ReadJson(JsonReader reader, Type objectType, JsonObject existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        // 若不需要反序列化,可保留此抛出;需要的话可自行实现逻辑
        throw new NotImplementedException("反序列化逻辑未实现");
    }

    public override void WriteJson(JsonWriter writer, JsonObject value, JsonSerializer serializer)
    {
        writer.WriteStartObject();
        foreach (var kvp in value)
        {
            writer.WritePropertyName(kvp.Key);
            // 递归序列化节点值
            serializer.Serialize(writer, kvp.Value?.GetValue<object>());
        }
        writer.WriteEndObject();
    }
}

然后在序列化时配置转换器:

var jsonString = JsonConvert.SerializeObject(objx, Formatting.None,
    new JsonSerializerSettings()
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        Converters = { new JsonObjectConverter() }
    });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:44:53