如何将Enum定义转换为JavaScript对象(json)

问题描述 投票:0回答:1

我也检查了此post,但它给了我相同的结果。枚举定义:

    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",}

我该如何实现?

.net jsonserializer
1个回答
0
投票

没有,没有可以使用的特殊属性。 JavaScriptSerializerenums序列化为其数值,而不是其字符串表示形式。您将需要使用自定义序列化来序列化enum作为其名称而不是数字值。


如果可以使用JSON.Net而不是JavaScriptSerializer,请参阅answer on this question提供的OmerBakhari:JSON.net涵盖了此用例(通过属性[JsonConverter(typeof(StringEnumConverter))])以及许多其他内置方法未处理的用例。网络序列化器。 Here is a link comparing features and functionalities of the serializers


0
投票

您可以这样子。.

   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);
© www.soinside.com 2019 - 2024. All rights reserved.