如何在实体框架上的这个枚举上创建一个 Get 方法?



>我的枚举中有这个:

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?

最新更新