Подтвердить что ты не робот

Сеансы 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.

4b9b3361

Ответ 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
});