Сеансы Enum Json vs XML
У меня есть следующий Enum в моем проекте
public enum CameraAccessMethod
{
Manual = 0,
Panasonic = 1,
Axis = 2,
AirCam = 3
}
У меня есть объект, который сериализуется либо в json, либо в XML в зависимости от разных сценариев, а одно из свойств объекта имеет тип CameraAccessMethod
. Проблема заключается в том, что когда это свойство сериализуется в XML, оно будет давать строковое представление значений enum (Manual, Panasonic, Axis, Aircam), но в JSON оно сериализуется с числовыми значениями (0,1,2,3). Как я могу избежать этой несогласованности? Мне нужны строки в сериализации JSON.
Ответы
Ответ 1
Так как Web API RC вы можете получить строковые представления перечислений, применив StringEnumConvert
к существующей коллекции преобразователей JsonMediaTypeFormatter
во время Application_Start()
:
var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);
Ответ 2
Вы можете сделать это легко, если переключитесь на использование форматирования на основе Json.NET(который будет поставляться из коробки со следующей каплей ASP.NET Web API). Подробнее см. В этом сообщении SO:
Как сообщить Json.Net глобально применить StringEnumConverter ко всем перечислениям
Ответ 3
Чтобы использовать JsonMediaTypeFormatter
и enumConverter
, мы можем использовать ниже код.
// начало кода здесь
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
serializerSettings.Converters.Add(enumConverter);
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter()
{
IgnoreCase = true,
SerializerSettings = serializerSettings
});