Если вы используете Sublime-текст для разработки python, вы можете избежать ошибки, используя пакет Anaconda.После установки Anaconda,
blockquote>
- откройте файл в sublime
- щелкните правой кнопкой мыши на открытых пространствах
- выберите anaconda
- нажмите на autoformat
- DONE или Нажмите CTRL + ALT + R.
Нет специального атрибута, который можно использовать. JavaScriptSerializer
сериализует перечисления
в их числовые значения, а не в их строковое представление. Для сериализации перечисления
в качестве имени вместо числового значения потребуется использовать настраиваемую сериализацию.
Если вы умеете использовать JSON.Net вместо JavaScriptSerializer
, чем см. ответ на этот вопрос , предоставленный OmerBakhari : JSON.net охватывает этот вариант использования (через атрибут [JsonConverter (typeof (StringEnumConverter))]
) и многие другие, не обрабатываемые встроенными сериализаторами .net. Вот ссылка, по которой сравниваются функции и возможности сериализаторов .
Я обнаружил, что Json.NET обеспечивает точную функциональность, которую я ищу, с атрибутом StringEnumConverter
:
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
[JsonConverter(typeof(StringEnumConverter))]
public Gender Gender { get; set; }
Более подробная информация доступна на StringEnumConverter
документация .
Есть и другие места для более глобальной настройки этого конвертера:
enum, если вы хотите, чтобы enum всегда сериализовался / десериализовался как строка:
[JsonConverter (typeof (StringEnumConverter))]
enum Gender {Мужской, Женский}
Если кто-то хочет избежать украшения атрибутов, вы можете добавить конвертер в свой JsonSerializer (предложенный Бьёрн Эгил ):
serializer.Converters.Add (новый Newtonsoft.Json.Converters.StringEnumConverter ());
, и он будет работать для каждого перечисления, которое он видит во время этой сериализации (предложено Трэвисом ).
или JsonConverter (предложено бананом ):
JsonConvert.SerializeObject (MyObject,
новый Newtonsoft.Json.Converters.StringEnumConverter ());
Кроме того, вы можете контролировать регистр и то, принимаются ли числа по-прежнему, с помощью конструктора StringEnumConverter (NamingStrategy, Boolean) .