При разработке контроллера API одним из важнейших аспектов является сериализация данных. Сериализация — это процесс преобразования сложных объектов данных в формат, который можно легко передавать через Интернет. В этой статье блога мы рассмотрим различные методы и примеры кода для настройки параметров сериализатора в контроллере веб-API.
Методы для настроек сериализатора веб-API:
- Настройки 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();
}
}
- Пользовательские настройки 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()
};
}
}
- Игнорирование нулевых значений.
Чтобы исключить свойства с нулевыми значениями во время сериализации, вы можете установить для свойстваNullValueHandlingJsonSerializerSettingsзначениеNullValueHandling.Ignore:
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
serializerSettings.NullValueHandling = NullValueHandling.Ignore;
- Пользовательский 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();
- Форматирование даты и времени.
Чтобы указать, как сериализуются даты и время, вы можете установить свойстваDateFormatHandlingиDateTimeZoneHandlingдляJsonSerializerSettings:
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
serializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
serializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;