#c# #asp.net #serialization
Вопрос:
Когда я выполняю запрос GET для получения моего списка лиц, перечисления (заголовок) преобразуются в целые числа:
class Person {
public Title PersonTitle{ get; set;}
public string Name { get; set;}
}
enum Title {
STUDENT,
TEACHER,
DIRECTOR
}
Допустим, у нас есть следующая ситуация:
Person first = new Person(){
PersonTitle = Title.STUDENT,
Name = "Dave"
}
это приведет к следующему JSON:
[
{
"Name" : "Dave",
"PersonTitle" : 1,
}
]
Как мне получить реальное значение перечисления (в данном случае STUDENT)?
Комментарии:
1.
public Type { get; set;}
вы что-то здесь упускаете??2. Я забыл имя свойства, но это не проблема. Теперь он отредактирован
3. Перечисление — это целое число. Значение enum По умолчанию перечисления сериализуются как целые числа. Оба JSON.NET и System.Text. Json можно настроить для их сериализации, используя вместо этого их имена тегов. Какой из них вы используете? Для System.Text. Json проверяет перечисления как строки
4. Когда я выполняю запрос Get, мой метод отправляет список с этими людьми.
Ответ №1:
Единственный код, который нужно было изменить, был:
Перед :
public enum Title {
STUDENT,
TEACHER,
DIRECTOR
}
После :
using using System.Text.Json.Serialization;
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum Title {
STUDENT,
TEACHER,
DIRECTOR
}
Теперь ответ выглядит так:
[
{
"Name" : "Dave",
"PersonTitle" : "Student",
}
]
Ответ №2:
Вам необходимо добавить соответствующий конвертер в сериализатор JSON.
System.Text.Json
:
- Используйте класс JsonStringEnumConverter .
Ответ №3:
вы можете установить атрибут JsonConverterAttribute
class Person {
[JsonConverter(typeof(StringEnumConverter))]
public Title PersonTitle{ get; set;}
public string Name { get; set;}
}
Обновление перечисления с помощью EnumMemberAttribute
enum Title {
[EnumMember(Value = "Student")]
STUDENT,
[EnumMember(Value = "Teacher")]
TEACHER,
[EnumMember(Value = "Director")]
DIRECTOR
}
Комментарии:
1. Я получаю: InvalidOperationException: преобразователь, указанный в MyClass. Человек. FileType’ не является производным от JsonConverter и не имеет общедоступного конструктора без параметров.
2. @schweppes0x Вы используете newtonsoft или System.Text?
3. Newtonsoft и я не уверен, почему, но теперь я не получаю никаких ошибок, но JSON по-прежнему неверен и по-прежнему отображает целые числа.
4. @schweppes0x: можете ли вы попробовать добавить EnumMember т.е
[EnumMember(Value = "Student")]
5. но значение неизвестно, поэтому, возможно, значение — учитель, а не ученик