关于enum描述的序列化
定义enum
public enum OwnEnum:byte
{
[Description("枚举默认值")]
NONE = 0,
[Description("状态1")]
state1= 1,
[Description("状态2")]
state2= 2,
...
}
重写JsonConverter
/// <summary>
/// enum类型的序列化
/// </summary>
public class OwnEnumConverter : JsonConverter
{
/// <summary>
/// 生效的类型
/// </summary>
public override bool CanConvert(Type objectType)
{
return objectType.IsEnum;
}
//反序列化
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return null;
}
/// <summary>
/// 序列化方法
/// </summary>
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(EnumExtend.GetDisplayText((Enum)value));
}
}
枚举拓展类
public static class EnumExtend
{
/// <summary>
/// 根据System.ComponentModel.DataAnnotations下的DisplayAttribute特性获取显示文本
/// </summary>
public static string GetDisplayText(this Enum t)
{
var t_type = t.GetType();
var fieldName = Enum.GetName(t_type, t);
var objs = t_type.GetField(fieldName).GetCustomAttributes(typeof(DescriptionAttribute), false);
return objs.Length > 0 ? ((DescriptionAttribute)objs[0]).Description : null;
}
}
使用,Converters是一个JsonConverter的集合
JsonSerializerSettings jss = new JsonSerializerSettings() { DateFormatString = "yyyy-MM-dd HH:mm" };
jss.Converters.Add(new OwnEnumConverter());
return JsonConvert.SerializeObject(data, jss);
好像大多enum描述的序列化是通过实体注解完成的,这也算是另一种解决办法吧