>我的枚举中有这个:
namespace MyServer.Aluno.Model
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
public enum AlunoSexo
{
[Display(Name = "Masculino")]
M = 1,
[Display(Name = "Feminino")]
F = 2,
}
}
如何使 HttpGet 在我的 API 中以 Json 显示它?
您可以使用此函数:
public class EnumModel<T>
{
public string StringValue { get; set; }
public T EnumValue { get; set; }
public int IntValue { get; set; }
public string DisplayName { get; set; }
public static List<EnumModel<T>> GetModel()
{
var t = typeof(T);
var fields = t.GetFields();
return fields.Where(x => x.CustomAttributes.Any(z => z.NamedArguments.Any(n => n.MemberName == "Name"))).Select(x =>
new EnumModel<T>
{
StringValue = x.Name,
EnumValue = (T)Enum.Parse(t, x.Name),
IntValue = (int)Enum.Parse(t, x.Name),
DisplayName = (string)x.CustomAttributes.Select(z => z.NamedArguments.First(n => n.MemberName == "Name").TypedValue).First().Value,
}).ToList();
}
}
用法:
var modelList = EnumModel<AlunoSexo>.GetModel();
string json = new JavaScriptSerializer().Serialize(modelList);
return new View(ModelList);
您的 JSON 将如下所示:
[
{
"StringValue":"M",
"EnumValue":1,
"IntValue":1,
"DisplayName":"Masculino"
},
{
"StringValue":"F",
"EnumValue":2,
"IntValue":2,
"DisplayName":"Feminino"
}
]
或者,您可以使用自定义库进行 Javascript 序列化,如Newtonsoft.Json
,并更改装饰enum
以使用该库的方式。
这里有几个例子:如何告诉 JSON.NET StringEnumConverter 采用 DisplayName?