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

JSON序列化后字段键变小写致API请求失败问题排查

解决JSON序列化后键名变小写导致API请求失败的问题

嘿,我之前也踩过这个一模一样的坑!问题根源十有八九是你混用了不同的JSON序列化库,导致你加的[JsonProperty]特性根本没生效。

问题拆解

你在DTO里用的[JsonProperty]是Newtonsoft.Json(也就是Json.NET)的特性,但如果调用API前的序列化代码用的是.NET自带的System.Text.Json.JsonSerializer,那这个特性完全不会被识别,默认就会把键名转成驼峰(小写开头),自然就和API要求的大小写不匹配了。

两种解决办法,选一个就行:

1. 改用System.Text.Json的对应特性

把[JsonProperty]替换成System.Text.Json.Serialization命名空间下的[JsonPropertyName],代码改成这样:

using System.Text.Json.Serialization;

public class ShoppingCartDTO 
{ 
    [JsonPropertyName("Userid")] 
    public string Userid { get; set; } 
    [JsonPropertyName("Msgv1")] 
    public string Msgv1 { get; set; } 
    [JsonPropertyName("Data")] 
    public string Data{ get; set; } 
}

这样用JsonSerializer.Serialize()序列化时,就会严格按照你指定的键名输出了。

2. 坚持用Newtonsoft.Json序列化

如果不想换特性,那就要确保序列化时用Newtonsoft的方法,而不是System.Text.Json的:

  • 首先确认项目里已经安装了Newtonsoft.Json NuGet包
  • 序列化代码改成:
var json = JsonConvert.SerializeObject(yourShoppingCartDto);

这样[JsonProperty]特性就能正常工作,键名会保持你指定的大小写。

额外排查点

如果上面的方法还没解决,检查下有没有全局配置强制修改命名规则:

  • 比如用System.Text.Json时,有没有设置JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase?不过放心,[JsonPropertyName]特性的优先级比全局配置高,只要加了特性就会覆盖全局规则。
  • 用Newtonsoft的话,有没有设置JsonSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver()?同样,[JsonProperty]特性会覆盖这个全局配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:29:48