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

EF Core 6下如何将API返回Data列表属性转为小驼峰?

问题描述

当前API返回的JSON格式如下:

{
  "Success": true,
  "Data": [
    {
      "ID": 1,
      "ProcedureID": 1,
      "Channel": "Channel 1",
      "ResolvedTime": "Anytime",
      "Description": "No description"
    }
  ],
  "StatusCode": 200,
  "Message": ""
}

期望返回结果仅Data列表内对象的属性名转为小驼峰,外层属性名保持不变:

{
  "Success": true,
  "Data": [
    {
      "id": 1,
      "procedureID": 1,
      "channel": "Channel 1",
      "resolvedTime": "Anytime",
      "description": "No description"
    }
  ],
  "StatusCode": 200,
  "Message": ""
}

当前使用EF Core 6,Program.cs中已配置Newtonsoft.Json:

builder.Services.AddControllers().AddNewtonsoftJson(options =>{
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
        options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;});

如何实现Data列表内对象属性名的小驼峰格式化需求?

解决方案

提供两种适配不同场景的实现方式:

方案一:实体类属性添加特性(精准控制)

直接给Data列表对应的实体类属性添加[JsonProperty]特性,指定小驼峰名称。假设实体类名为ProcedureChannel,修改后代码如下:

public class ProcedureChannel
{
    [JsonProperty("id")]
    public int ID { get; set; }

    [JsonProperty("procedureID")]
    public int ProcedureID { get; set; }

    [JsonProperty("channel")]
    public string Channel { get; set; }

    [JsonProperty("resolvedTime")]
    public string ResolvedTime { get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }
}

此方式无需修改全局配置,精准控制单个实体类的序列化规则,适合仅需调整少数实体的场景。

方案二:自定义ContractResolver(批量控制)

若需批量对特定类型应用小驼峰格式,同时保留外层属性名,可自定义序列化解析器:

  1. 编写自定义解析器类:
public class CustomContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);
        
        // 仅对目标实体类的属性转换为小驼峰
        if (member.DeclaringType == typeof(ProcedureChannel))
        {
            property.PropertyName = char.ToLowerInvariant(property.PropertyName[0]) + property.PropertyName.Substring(1);
        }
        
        return property;
    }
}
  1. 修改Program.cs中的序列化配置,替换为自定义解析器:
builder.Services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new CustomContractResolver();
    options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});

此方式适合多实体类需统一格式的场景,只需在解析器中添加更多目标类型判断即可扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:01:04