我想序列化一个枚举类型,以便它返回一个枚举数组作为包含“值”,“名称”和数据注释值。我需要序列化帮助。这是我到目前为止已经完成: 枚举:Json.NET带有数据注释的枚举类型的自定义序列化
public enum Status
{
[Display(Name="Active status")]
Active = 1,
[Display(Name = "Deactive status")]
Deactive = 2,
[Display(Name = "Pending status")]
Pending = 3
}
的DTO对象应连载:
public class ProjectDto
{
public Type StatusEnum { get; set; }
public Status CurrentStatus { get; set; }
}
值的勘定:
var project = new ProjectDto
{
CurrentStatus = Status.Active,
StatusEnum = typeof (Status)
};
var output = JsonConvert.SerializeObject(project);
为了获取值从我使用的枚举:
Enum.GetNames(typeof(Status)) //To get the names in the enum
Enum.GetValues(typeof(Status)) //To get the values in the enum
获取数据标注名称值是有点麻烦,但我发现这篇文章中帮助:http://geeksharp.com/2011/11/02/power-up-your-enumerations/ 他们已经创建了使用将获得的价值写在数据标注一个辅助方法:
public static string GetAttributeValue<T>(this Enum e,
Func<T, object> selector) where T : Attribute
{
var output = e.ToString();
var member = e.GetType().GetMember(output).First();
var attributes = member.GetCustomAttributes(typeof(T), false);
if (attributes.Length > 0)
{
var firstAttr = (T)attributes[0];
var str = selector(firstAttr).ToString();
output = string.IsNullOrWhiteSpace(str) ? output : str;
}
return output;
}
而且你可以使用这个值。
.GetAttributeValue<DisplayAttribute>(y => y.Name)
输出应该是这样的
{
statusEnum: [
{ "value": "1", "name": "Active", "label": "Active status" },
{ "value": "2", "name": "Deactive", "label": "Deactive status" },
{ "value": "3", "name": "Pending", "label": "Pending status" }
],
currentStatus: { "value": "1", "name": "Active", "label": "Active status" }
}
如前所述我需要帮助创建自定义Json.NET序列化和反序列化来获得所需的输出。任何帮助都会被支持。
“CurrentStatus”属性实际上是一个数组吗?另外,SystemEnum类型的'StatusEnum'如何被序列化为一个看起来像这样的对象呢? – 2014-09-03 11:55:53
对不起。我错过了我在输出中混淆了statusEnum和currentStatus,现在已经修复。statusEnum应该代表状态枚举类型及其所有值,而currentStatus应该代表已被“选中”的单枚举值 – 2014-09-03 12:05:17