报错:JsonOptions不存在SerializerSettings定义的代码问题咨询
解决ASP.NET Core中AddJsonOptions提示“JsonOptions does not contain a definition for SerializerSettings”的问题
错误原因
ASP.NET Core 3.0及以后版本,默认使用System.Text.Json作为JSON序列化组件,而你代码里用到的SerializerSettings是Newtonsoft.Json(Json.NET)专属的配置属性,直接在AddJsonOptions里调用自然会报错。
解决方案
方案1:继续使用Newtonsoft.Json(Json.NET)
- 第一步:安装对应的NuGet包
使用Package Manager控制台:
或者.NET CLI命令:Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJsondotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson - 第二步:修改代码,用
AddNewtonsoftJson替代AddJsonOptions配置序列化设置builder.Services.AddMvc(options => { options.Filters.Add<JsonExceptionFilter>(); options.Filters.Add<RequireHttpsOrCloseAttribute>(); options.Filters.Add<LinkRewritingFilter>(); }) .AddNewtonsoftJson(options => { options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; options.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat; options.SerializerSettings.DateParseHandling = DateParseHandling.DateTimeOffset; });
方案2:改用ASP.NET Core默认的System.Text.Json
如果不想引入Newtonsoft.Json,可以直接配置System.Text.Json的JsonSerializerOptions,注意它的配置项和Json.NET有所不同,日期处理需调整对应属性或自定义转换器:
builder.Services.AddMvc(options => { options.Filters.Add<JsonExceptionFilter>(); options.Filters.Add<RequireHttpsOrCloseAttribute>(); options.Filters.Add<LinkRewritingFilter>(); }) .AddJsonOptions(options => { // 示例:添加UTC时间序列化转换器 options.JsonSerializerOptions.Converters.Add(new DateTimeOffsetConverter()); // 其他常用配置 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; });
注:System.Text.Json的日期处理逻辑和Json.NET有差异,若需完全对齐原有行为,可能需要编写自定义转换器。
内容的提问来源于stack exchange,提问作者CerenSusuz
相关产品推荐
相关产品推荐

