System.Text.Json反序列化时属性大小写不匹配引发的映射问题
问题解决方法
你遇到的是System.Text.Json默认严格匹配属性名大小写导致的反序列化失败问题,有以下几种可行方案:
方案1:反序列化时开启属性名大小写不敏感(最便捷)
无需修改DTO定义和接口逻辑,仅需在反序列化时传入配置参数即可:
var tt = JsonSerializer.Deserialize<AuditReviewerDelegationDto>(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
开启该配置后,反序列化器会自动匹配大小写不一致的属性名。
方案2:为DTO属性显式绑定JSON字段名
如果不需要全局开启大小写不敏感,可单独为DTO的每个属性指定对应的JSON小写字段名:
public class AuditReviewerDelegationDto { [JsonPropertyName("delegationId")] public int DelegationId { get; set; } [JsonPropertyName("delegateUserName")] public string DelegateUserName { get; set; } // 其余属性按照同样规则配置即可 }
方案3:接口侧调整返回值命名格式
如果该接口是你自行维护的ASP.NET Core项目,可修改全局JSON序列化配置,让接口直接返回大写开头的帕斯卡命名格式属性,和你的DTO定义完全匹配:
// Program.cs中添加配置 builder.Services.AddControllers() .AddJsonOptions(options => { // 关闭默认驼峰命名策略,使用属性原生名称返回 options.JsonSerializerOptions.PropertyNamingPolicy = null; });
额外优化提示:你的现有代码中
GetAsync后使用.Result获取响应属于同步阻塞调用,在异步方法中存在死锁风险,建议修改为异步等待:var response = await LocalHttpClient.GetAsync(BaseAddress + "api/AuditReviewerDelegation/GetDelegation/" + mdmUserIdentifier);
内容的提问来源于stack exchange,提问作者bilpor
相关产品推荐
相关产品推荐

