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

使用Json.NET反序列化时如何生成小写键名的JSON

实现模型反序列化后得到小写键名JSON的方案

嗨,这个需求其实挺常见的,我给你整理了几种主流技术栈的实现方式,你可以对应自己的开发场景来用:

Java 场景(Jackson 框架)

Jackson是Java生态里处理JSON的主流框架,有两种方式实现:

方式1:全局配置(推荐批量处理)

如果想让所有模型的字段都转成小写键名,不需要给每个字段加注解,直接配置ObjectMapper:

ObjectMapper objectMapper = new ObjectMapper();
// 自定义命名策略,将所有字段名转为小写
objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategy() {
    @Override
    public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
        return defaultName.toLowerCase();
    }
});

// 反序列化示例(假设你的模型类是User)
User user = objectMapper.readValue(jsonString, User.class);
// 序列化时也会输出小写键名的JSON
String lowerCaseJson = objectMapper.writeValueAsString(user);

如果是Spring Boot项目,还可以通过配置文件全局生效,在application.yml里加:

spring:
  jackson:
    property-naming-strategy: LOWER_CASE

方式2:单个字段注解

如果只需要特定字段转小写,给字段加@JsonProperty注解指定小写键名:

public class User {
    @JsonProperty("username")
    private String UserName;
    @JsonProperty("age")
    private int Age;
    // getter/setter 省略
}

C# 场景

C#里常用的JSON库有Newtonsoft.Json(Json.NET)和官方的System.Text.Json,两种都支持小写键名配置:

方案1:Newtonsoft.Json

全局配置

var serializerSettings = new JsonSerializerSettings
{
    ContractResolver = new DefaultContractResolver
    {
        NamingStrategy = new LowerCaseNamingStrategy()
    }
};

// 反序列化
User user = JsonConvert.DeserializeObject<User>(jsonString, serializerSettings);
// 序列化输出小写键名JSON
string lowerCaseJson = JsonConvert.SerializeObject(user, serializerSettings);

单个字段配置

给字段加[JsonProperty]注解:

public class User {
    [JsonProperty("username")]
    public string UserName { get; set; }
    [JsonProperty("age")]
    public int Age { get; set; }
}

方案2:System.Text.Json(官方库)

全局配置

var jsonOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.LowerCase
};

// 反序列化
User user = JsonSerializer.Deserialize<User>(jsonString, jsonOptions);
// 序列化输出小写键名JSON
string lowerCaseJson = JsonSerializer.Serialize(user, jsonOptions);

Python 场景

Python常用的JSON处理方案包括Pydantic(适合模型驱动开发)和原生JSON模块:

方案1:Pydantic(推荐)

通过模型配置实现全局小写键名:

from pydantic import BaseModel, ConfigDict

class User(BaseModel):
    # 配置别名生成器为小写,同时允许通过原字段名赋值
    model_config = ConfigDict(alias_generator=lambda field_name: field_name.lower(), populate_by_name=True)
    UserName: str
    Age: int

# 反序列化(支持原字段名或小写键名的JSON)
user = User.model_validate_json('{"UserName": "Alice", "Age": 30}')
# 序列化输出小写键名JSON
lowerCaseJson = user.model_dump_json(by_alias=True)

方案2:原生JSON模块

自定义编码器实现键名转小写:

import json

class LowerCaseJsonEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, dict):
            # 递归处理字典的键转小写
            lower_dict = {k.lower(): self.encode(v) for k, v in obj.items()}
            return json.dumps(lower_dict)
        elif isinstance(obj, list):
            # 递归处理列表元素
            return json.dumps([self.encode(item) for item in obj])
        else:
            # 基础类型直接序列化
            return json.dumps(obj)

# 使用示例
user_dict = {"UserName": "Bob", "Age": 25}
lowerCaseJson = LowerCaseJsonEncoder().encode(user_dict)

如果你的技术栈不在上面,随时告诉我具体语言,我再给你针对性的方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:12:53