设置Asp.Net核心MVC Json选项

sty*_*ybl 12 c# json json.net .net-core asp.net-core

比如说,我在项目中AC拥有的一个Address类具有类型的属性IPEndPoint.此类型以及IPAddress因默认情况下无法序列化为JSON而臭名昭着.由于我需要序列化我的类,我实现了两个自定义转换器:IPAddressConverterIPEndPointConverter.为了让Newtonsoft使用这两个转换器,我创建了这个类:

public sealed class CustomSettings : JsonSerializerSettings
{
    public CustomSettings() : base()
    {
        this.Converters.Add(new IPAddressConverter());
        this.Converters.Add(new IPEndPointConverter());
        this.TypeNameHandling = TypeNameHandling.Auto;
    }
} 
Run Code Online (Sandbox Code Playgroud)

..我在我的Main喜欢中使用:

Newtonsoft.Json.JsonConvert.DefaultSettings = () => new CustomSettings();
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试为我的程序添加API.我创建了一个.Net Core Web API项目,并将其成功集成到我的程序中.但是,当我尝试编写一个需要AC来自请求体的JSON格式实例的POST方法时,出现了问题.序列化程序无法转换IPEndPoint,因此值AC始终是null.

有关.Net Core API配置的信息非常少.谁能告诉我如何将这些相同的设置传递给MVC的序列化器?

编辑

我找到了一种方式(某种程度).事实证明,您可以在ConfigureServices方法中设置JSON选项.

我尝试修改MVC的序列化程序的设置,就像我对程序的其余部分所做的那样:

services.AddMvc().AddJsonOptions(options => options.SerializerSettings = new CustomSettings());
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于options.SerializerSettings只读.

可以逐个传递转换器,但我更喜欢它们都是从一个地方(CustomSettings班级)管理的.这可能吗?

Nko*_*osi 10

创建一个扩展方法,封装您要配置的内容

public static void AddCustomSettings(this Newtonsoft.Json.JsonSerializerSettings settings) {
    settings.Converters.Add(new IPAddressConverter());
    settings.Converters.Add(new IPEndPointConverter());
    settings.TypeNameHandling = TypeNameHandling.Auto;
}
Run Code Online (Sandbox Code Playgroud)

并配置它 ConfigureServices

services.AddJsonOptions(options => options.SerializerSettings.AddCustomSettings());
Run Code Online (Sandbox Code Playgroud)