设置 Asp.Net Core MVC Json 选项
Posted
技术标签:
【中文标题】设置 Asp.Net Core MVC Json 选项【英文标题】:Set Asp.Net Core MVC Json options 【发布时间】:2017-10-17 07:59:34 【问题描述】:我的项目中的一个类称为AC
,具有Address
类型的属性IPEndPoint
。这种类型,以及IPAddress
,因为默认情况下不能序列化为 JSON 而臭名昭著。因为我需要序列化我的类,所以我实现了两个自定义转换器:IPAddressConverter
和 IPEndPointConverter
。为了让 Newtonsoft 使用这两个转换器,我制作了这个类:
public sealed class CustomSettings : JsonSerializerSettings
public CustomSettings() : base()
this.Converters.Add(new IPAddressConverter());
this.Converters.Add(new IPEndPointConverter());
this.TypeNameHandling = TypeNameHandling.Auto;
..我在我的Main
中使用如下:
Newtonsoft.Json.JsonConvert.DefaultSettings = () => new CustomSettings();
现在我正在尝试将 API 添加到我的程序中。我创建了一个 .Net Core Web API 项目并成功地将其集成到我的程序中。但是,当我尝试编写一个需要来自请求正文的 JSON 形式的 AC
实例的 POST 方法时出现了问题。序列化程序无法转换IPEndPoint
,因此AC
的值始终为null
。
有关 .Net Core API 配置的信息非常少。谁能告诉我如何将这些相同的设置传递给 MVC 的序列化程序?
编辑
我找到了一种方法(有点)。事实证明,您可以在 ConfigureServices
方法中设置 JSON 选项。
我尝试修改 MVC 的序列化程序的设置,就像我对程序的其余部分所做的那样:
services.AddMvc().AddJsonOptions(options => options.SerializerSettings = new CustomSettings());
但是,这不起作用,因为options.SerializerSettings
是只读的。
我可以一个接一个地传递转换器,但我希望它们都从一个地方(CustomSettings
类)进行管理。这可能吗?
【问题讨论】:
或者创建一个扩展方法在一个地方为你做这件事,这是我决定的 【参考方案1】:创建一个封装你想要配置的扩展方法
public static void AddCustomSettings(this Newtonsoft.Json.JsonSerializerSettings settings)
settings.Converters.Add(new IPAddressConverter());
settings.Converters.Add(new IPEndPointConverter());
settings.TypeNameHandling = TypeNameHandling.Auto;
并在ConfigureServices
中配置
services.AddJsonOptions(options => options.SerializerSettings.AddCustomSettings());
【讨论】:
我在另一个项目的Main
中如何称呼这个方法? (而不是做Newtonsoft.Json.JsonConvert.DefaultSettings = () => new CustomSettings();
)
@Sty,该扩展用于设置 API,您的 main 可以保持不变以上是关于设置 Asp.Net Core MVC Json 选项的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core 3.1 MVC/WebApi JSON 全局配置
asp.net core序列化json配置,适用于mvc,webapi
asp.net core序列化json配置,适用于mvc,webapi
在 ASP.Net Core MVC 中读取 JSON 发布数据
在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据