как преобразовать определение Enum в объект JavaScript (json) - PullRequest
0 голосов
/ 30 сентября 2019

Я также проверил этот пост , но он дает мне тот же результат. определение enum:

    public enum myEnum
        {
            variable1 = 1,
            variable2 = 25,
            variable3 = 35
        }

Вот что я попробовал:

var myJsObject= @Html.Raw(JsonConvert.SerializeObject(Enum.GetValues(typeof(myEnum)), new Newtonsoft.Json.Converters.StringEnumConverter()));

и вот что он возвращает:

["variable1","variable2","variable3"]

Ожидаемый результат:

{"1":"variable1","25":"variable2","35":"variable3",}

Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

вы можете что-то вроде этого ..

   public enum myEnum
   {
      variable1 = 1,
      variable2 = 25,
      variable3 = 35
   }

    static Dictionary<int,string> EnumToDictionary<T>() where T : struct, IConvertible
    {
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException("T must be an enum type");
        }
        var dictionary = Enum.GetValues(typeof(T))
            .Cast<T>()
            .ToDictionary( e=>  Convert.ToInt32(e), e => e.ToString());
        return dictionary;
    }

используя ...

var dictionary =  EnumToDictionary<tEnum>();
var jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(dictionary);
0 голосов
/ 30 сентября 2019

Нет, нет специального атрибута, который вы можете использовать. JavaScriptSerializer сериализует enums в их числовые значения, а не в строковое представление. Вам потребуется использовать пользовательскую сериализацию для сериализации enum в качестве имени вместо числового значения.


Если вы можете использовать JSON.Net вместо JavaScriptSerializer, тогда смотрите ответ вопрос предоставлен OmerBakhari : JSON.net охватывает этот вариант использования (через атрибут [JsonConverter(typeof(StringEnumConverter))]) и многие другие, которые не обрабатываются встроенными сериализаторами .net. Вот ссылка, сравнивающая функции и возможности сериализаторов .

...