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

如何在C#中使用Newtonsoft.Json将snake_case转为camelCase?

解决方案

要实现将snake_case格式的JSON反序列化为C#类,并且能以驼峰式(camelCase)访问d字段内的属性,你可以通过配置Newtonsoft.Json的序列化规则来实现,具体步骤如下:

1. 定义C#类

保持示例中的类结构,d字段使用dynamic类型以适配不确定的内容:

public class Example
{
    public int op { get; set; }
    public string t { get; set; }
    public dynamic d { get; set; }
}

2. 自定义命名策略

创建一个自定义的命名策略类,用于将JSON中的snake_case键转换为驼峰式的属性名:

public class SnakeToCamelCaseNamingStrategy : SnakeCaseNamingStrategy
{
    public SnakeToCamelCaseNamingStrategy() : base(true, false)
    {
        ProcessDictionaryKeys = true;
    }

    public override string GetDeserializedPropertyName(string name)
    {
        // 先通过内置SnakeCase策略转成PascalCase,再转为camelCase
        var pascalCaseName = base.GetDeserializedPropertyName(name);
        if (string.IsNullOrEmpty(pascalCaseName))
            return pascalCaseName;
        
        return char.ToLower(pascalCaseName[0]) + pascalCaseName.Substring(1);
    }
}

3. 配置序列化设置并反序列化

使用自定义的命名策略配置JsonSerializerSettings,然后执行反序列化:

// 示例JSON字符串
var json = @"
{
   ""op"": 0,
   ""t"": ""some_name"",
   ""d"": {
     ""heartbeat_interval"": 10000,
     ""user"": {
        ""user_id"": 1
     }
   }
}";

// 配置序列化设置
var serializerSettings = new JsonSerializerSettings
{
    ContractResolver = new DefaultContractResolver
    {
        NamingStrategy = new SnakeToCamelCaseNamingStrategy()
    }
};

// 反序列化JSON到Example类
var res = JsonConvert.DeserializeObject<Example>(json, serializerSettings);

// 现在可以用驼峰式访问d内的属性
var heartbeatInterval = res.d.heartbeatInterval; // 对应JSON的heartbeat_interval
var userId = res.d.user.userId; // 对应JSON的user_id

说明

  • 自定义命名策略同时处理了类属性和dynamic对象内的字典键,确保snake_case的JSON键都能转换为驼峰式访问名。
  • 如果你不想自定义命名策略,也可以直接在DefaultContractResolver中实现键转换逻辑,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:05:23