Полное руководство по настройкам сериализатора веб-API для контроллеров API

При разработке контроллера API одним из важнейших аспектов является сериализация данных. Сериализация — это процесс преобразования сложных объектов данных в формат, который можно легко передавать через Интернет. В этой статье блога мы рассмотрим различные методы и примеры кода для настройки параметров сериализатора в контроллере веб-API.

Методы для настроек сериализатора веб-API:

  1. Настройки JsonSerializerSettings по умолчанию:
    По умолчанию веб-API ASP.NET использует библиотеку Newtonsoft.Json для сериализации JSON. Вы можете изменить настройки по умолчанию, используя класс GlobalConfigurationв методе Registerфайла WebApiConfig.cs:
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Get the default JsonSerializerSettings
        var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
        // Modify settings as per your requirements
        serializerSettings.Formatting = Formatting.Indented;
        serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }
}
  1. Пользовательские настройки JsonSerializerSettings для каждого контроллера.
    Вы также можете настроить параметры сериализатора для каждого контроллера. Такой подход позволяет иметь разные настройки для разных контроллеров. Просто создайте собственный объект JsonSerializerSettingsи назначьте его свойству JsonSerializerSettingsобъекта JsonMediaTypeFormatter, используемого контроллером:
public class MyApiController : ApiController
{
    public MyApiController()
    {
        var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        jsonFormatter.SerializerSettings = new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
    }
}
  1. Игнорирование нулевых значений.
    Чтобы исключить свойства с нулевыми значениями во время сериализации, вы можете установить для свойства NullValueHandlingJsonSerializerSettingsзначение NullValueHandling.Ignore:
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
serializerSettings.NullValueHandling = NullValueHandling.Ignore;
  1. Пользовательский ContractResolver:
    ContractResolverотвечает за определение того, как сериализуются свойства и объекты. Вы можете создать собственный преобразователь контрактов, унаследовав от DefaultContractResolverи переопределив его методы:
public class CustomContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var properties = base.CreateProperties(type, memberSerialization);
        // Exclude properties with specific attributes
        properties = properties.Where(p => !p.AttributeProvider.GetAttributes(typeof(CustomAttribute), true).Any()).ToList();
        return properties;
    }
}
// Usage
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
serializerSettings.ContractResolver = new CustomContractResolver();
  1. Форматирование даты и времени.
    Чтобы указать, как сериализуются даты и время, вы можете установить свойства DateFormatHandlingи DateTimeZoneHandlingдля JsonSerializerSettings:
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
serializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
serializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;