ASP.NET Core 8 WebApi中NewtonSoft序列化保留属性大小写问题
解决ASP.NET Core 8 WebApi中Newtonsoft JSON保留属性原大小写的问题
你的问题出在配置对象不匹配:你给AddJsonOptions(对应System.Text.Json)设置了保留原大小写的规则,但实际生效的序列化器是Newtonsoft JSON,而它的配置块是空的,默认会启用驼峰命名策略,所以Error被转成了error。
要解决这个问题,需要在AddNewtonsoftJson的配置中明确禁用驼峰命名,保留属性的原始大小写:
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString; options.JsonSerializerOptions.PropertyNamingPolicy = null; options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; }) .AddNewtonsoftJson(options => { // 使用默认契约解析器,保留属性原命名 options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); });
补充说明
DefaultContractResolver是Newtonsoft的默认解析器,不会对属性名做大小写转换;- 如果是强类型模型,也可以通过
[JsonProperty("Error")]特性单独指定序列化后的属性名,但匿名对象只能通过全局配置解决; - 你之前配置的
AddJsonOptions只对System.Text.Json生效,和Newtonsoft JSON的行为无关,可按需保留。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

