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

Json.NET中JRaw序列化时如何将内部JSON转为驼峰式命名?

解决JRaw内容在驼峰序列化时不转换属性名的问题

这个问题的核心原因其实很直接:JRaw的设计就是直接输出原始JSON字符串,JSON.NET在序列化过程中会跳过对它内部内容的解析和处理,所以里面的帕斯卡命名属性自然不会被转换成驼峰格式。要解决这个问题,有两种实用的思路:

思路一:替换JRaw为可解析的JToken类型

如果你的业务场景允许,别直接用JRaw存储JSON字符串,而是先把字符串解析成JObject(或对应的JToken子类)。这样JSON.NET的驼峰解析器就能遍历处理里面的所有属性名了。

示例代码:

public class C { public JToken Prop { get; set; } } // 将JRaw替换为JToken/JObject

// 初始化时解析JSON字符串
var jObj = JObject.Parse("{\"A\":42}");
var c = new C { Prop = jObj };

// 执行序列化
var result = JsonConvert.SerializeObject(c, new JsonSerializerSettings { 
    ContractResolver = new CamelCasePropertyNamesContractResolver() 
});

最终输出结果会是:{"prop":{"a":42}},内部的"A"也成功转成了"a"。

思路二:自定义JsonConverter处理JRaw

如果必须保留JRaw类型(比如有特定的业务约束),可以写一个自定义转换器,在序列化时手动解析JRaw的内容,应用驼峰规则后再输出。

自定义转换器代码:

public class CamelCaseJRawConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(JRaw).IsAssignableFrom(objectType);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var jRaw = (JRaw)value;
        // 把JRaw的原始内容解析为JToken
        var token = JToken.Parse(jRaw.ToString());
        
        // 用当前序列化器的设置(包含驼峰解析器)序列化这个token
        serializer.Serialize(writer, token);
    }

    // 该转换器仅处理序列化,反序列化可直接抛出异常
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException("此转换器仅支持序列化操作");
    }
}

使用这个转换器的示例:

var a = new JRaw("{\"A\":42}");
var c = new C { Prop = a };

var result = JsonConvert.SerializeObject(c, new JsonSerializerSettings { 
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    Converters = new List<JsonConverter> { new CamelCaseJRawConverter() } // 添加自定义转换器
});

这样输出结果同样是:{"prop":{"a":42}},完美解决JRaw内部属性名的转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:27:58