.NET - JSON-сериализация enum в виде строки - PullRequest
1017 голосов
/ 14 марта 2010

У меня есть класс, который содержит свойство enum, и после сериализации объекта с использованием JavaScriptSerializer мой результат json содержит целочисленное значение перечисления, а не его string "имя". Есть ли способ получить enum как string в моем json, не создавая пользовательский JavaScriptConverter? Возможно, есть атрибут, который я мог бы украсить определением enum, или свойством объекта, с помощью?

Как пример:

enum Gender { Male, Female }

class Person
{
    int Age { get; set; }
    Gender Gender { get; set; }
}

Желаемый результат JSON:

{ "Age": 35, "Gender": "Male" }

Ответы [ 23 ]

0 голосов
/ 16 мая 2019

А для VB.net я нашел следующие работы:

Dim sec = New Newtonsoft.Json.Converters.StringEnumConverter()
sec.NamingStrategy() = New Serialization.CamelCaseNamingStrategy

Dim JSON_s As New JsonSerializer
JSON_s.Converters.Add(sec)

Dim jsonObject As JObject
jsonObject = JObject.FromObject(SomeObject, JSON_s)
Dim text = jsonObject.ToString

IO.File.WriteAllText(filePath, text)
0 голосов
/ 12 июля 2016

Я собрал все части этого решения, используя библиотеку Newtonsoft.Json. Он устраняет проблему с перечислением, а также значительно улучшает обработку ошибок и работает в службах, размещенных на IIS. Это довольно много кода, поэтому вы можете найти его на GitHub здесь: https://github.com/jongrant/wcfjsonserializer/blob/master/NewtonsoftJsonFormatter.cs

Вы должны добавить несколько записей в ваш Web.config, чтобы заставить его работать, вы можете увидеть файл примера здесь: https://github.com/jongrant/wcfjsonserializer/blob/master/Web.config

0 голосов
/ 19 апреля 2016
new JavaScriptSerializer().Serialize(  
    (from p   
    in (new List<Person>() {  
        new Person()  
        {  
            Age = 35,  
            Gender = Gender.Male  
        }  
    })  
    select new { Age =p.Age, Gender=p.Gender.ToString() }  
    ).ToArray()[0]  
);
...