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

.NET 6 无需模型绑定修改JSON序列化属性名称大小写方案求助

不执行模型绑定转换JSON属性为小驼峰的实现方案

核心思路为直接对JSON节点结构做递归遍历,对所有属性名应用小驼峰命名规则,全程不需要绑定到实体模型即可完成转换,完全规避原生JsonElement/JsonNode序列化时忽略PropertyNaming配置的问题。


方案1:基于JsonElement实现

兼容性更强,支持所有.NET Core 3.0+版本:

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

public static class JsonPropertyNameConverter
{
    private static readonly JsonNamingPolicy _camelCasePolicy = JsonNamingPolicy.CamelCase;

    // 对外暴露的转换方法:输入原JSON字符串,输出小驼峰格式JSON字符串
    public static string ConvertToCamelCaseJson(string inputJson)
    {
        using var doc = JsonDocument.Parse(inputJson);
        var convertedNode = ProcessJsonElement(doc.RootElement);
        return JsonSerializer.Serialize(convertedNode, new JsonSerializerOptions { WriteIndented = true });
    }

    // 递归处理任意类型的JsonElement节点
    private static JsonNode? ProcessJsonElement(JsonElement element)
    {
        return element.ValueKind switch
        {
            JsonValueKind.Object => ProcessObjectElement(element),
            JsonValueKind.Array => ProcessArrayElement(element),
            _ => JsonNode.Parse(element.GetRawText())
        };
    }

    // 处理JSON对象:转换所有属性名为小驼峰
    private static JsonObject ProcessObjectElement(JsonElement element)
    {
        var jsonObj = new JsonObject();
        foreach (var property in element.EnumerateObject())
        {
            var camelCaseName = _camelCasePolicy.ConvertName(property.Name);
            jsonObj[camelCaseName] = ProcessJsonElement(property.Value);
        }
        return jsonObj;
    }

    // 处理JSON数组:遍历处理数组内每个元素
    private static JsonArray ProcessArrayElement(JsonElement element)
    {
        var jsonArray = new JsonArray();
        foreach (var item in element.EnumerateArray())
        {
            jsonArray.Add(ProcessJsonElement(item));
        }
        return jsonArray;
    }
}

使用示例

// 测试用原JSON
var originalJson = """
{
    "MyPoperty" : 5,
    "MyComplexProperty" : {
        "MyOtherProperty": "value",
        "MyThirdProperty": true
    }
}
""";

// 转换得到小驼峰JSON
var camelCaseJson = JsonPropertyNameConverter.ConvertToCamelCaseJson(originalJson);

方案2:基于JsonNode的轻量实现

.NET 6+版本可使用该方案,代码更简洁:

public static class JsonPropertyNameConverter
{
    public static string ConvertToCamelCaseWithJsonNode(string inputJson)
    {
        var rootNode = JsonNode.Parse(inputJson);
        ProcessJsonNode(rootNode);
        return rootNode!.ToJsonString(new JsonSerializerOptions { WriteIndented = true });
    }

    private static void ProcessJsonNode(JsonNode? node)
    {
        if (node is JsonObject jsonObj)
        {
            // 先缓存原有属性避免修改时遍历异常
            var properties = jsonObj.ToList();
            foreach (var (name, value) in properties)
            {
                jsonObj.Remove(name);
                var camelCaseName = JsonNamingPolicy.CamelCase.ConvertName(name);
                jsonObj[camelCaseName] = value;
                ProcessJsonNode(value);
            }
        }
        else if (node is JsonArray jsonArray)
        {
            foreach (var item in jsonArray)
            {
                ProcessJsonNode(item);
            }
        }
    }
}

两种方案均支持任意层级的嵌套JSON、数组结构,兼容已有小驼峰属性的场景,转换结果完全匹配需求示例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:57:03