我也检查了此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",}
我该如何实现?
没有,没有可以使用的特殊属性。 JavaScriptSerializer
将enums
序列化为其数值,而不是其字符串表示形式。您将需要使用自定义序列化来序列化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。
您可以这样子。.
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);