Задайте параметры Asp.Net Core MVC Json

Один из классов, которые у меня есть в моем проекте, называемом 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 и успешно интегрировал его в свою программу. Однако возникли проблемы, когда я попытался написать метод POST, который потребовал экземпляр AC в форме JSON из тела запроса. Сериализатор не смог преобразовать IPEndPoint, и поэтому значение AC всегда было null.

Информация о конфигурации API. Core Core довольно редкая. Может ли кто-нибудь сказать мне, как я могу передать те же настройки в сериализатор MVC?

ИЗМЕНИТЬ

Я нашел способ (вроде). Оказывается, вы можете установить параметры JSON в методе ConfigureServices.

Я попытался изменить параметры сериализатора 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());