Мы пытаемся получить значение из атрибута EnumMember, примененного к Enum. Используя приведенный ниже код, мы получаем "\"South Carolina\""
, но нам нужна "Южная Каролина":
JsonConvert.SerializeObject(dto.State, new StringEnumConverter());
Это перечисление:
public enum State
{
[EnumMember(Value = "South Carolina")]
South_Carolina
}
Мы попробовали без StringEnumConverter, как показано ниже, и получили число 0:
JsonConvert.SerializeObject(dto.State);
Использование .ToString()
дает нам "Южную_Каролину"
1 ответ
Как я написал в комментарии, это правильное поведение сериализатора. Вы можете использовать отражение, чтобы получить значение EnumMemberAttribute
. Например так:
public string? GetEnumMemberAttributeValue<T>(T enumVal) where T: System.Enum
{
var mi = typeof(T).GetMember(enumVal.ToString()).First();
var attr = mi.GetCustomAttributes().OfType<EnumMemberAttribute>().FirstOrDefault();
return attr != null ? attr.Value : null ;
}
Console.WriteLine(GetEnumMemberAttributeValue(State.South_Carolina)); // prints "South Carolina"
Можно улучшить этот код хотя бы за счет кеширования.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.