国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

基于JSON.NET為Enum實(shí)現(xiàn)數(shù)據(jù)與界面分離

2019-11-17 02:22:10
字體:
供稿:網(wǎng)友

基于JSON.NET為Enum實(shí)現(xiàn)數(shù)據(jù)與界面分離

    在日常做項(xiàng)目過程中,一直很煩惱枚舉值顯示問題。當(dāng)添加,修改,刪除枚舉值時(shí),都要去修改界面原先的中文表述,很是麻煩。今天針對(duì)Enum做相應(yīng)的擴(kuò)展,并實(shí)現(xiàn)Newtonsoft.Json(JSON.NET)JsonConverter個(gè)性化定制,使數(shù)據(jù)與界面分離,此方法適用于依賴Json數(shù)據(jù)結(jié)構(gòu)傳輸數(shù)據(jù)的應(yīng)用開發(fā),例如:web 開發(fā)。

1、首先,實(shí)現(xiàn)Localization屬性標(biāo)簽

 [AttributeUsage(AttributeTargets.Field)]    public class LocalizationAttribute : Attribute    {        public LocalizationAttribute(string showValue)        {            ShowValue = showValue;        }        public string ShowValue { get; set; }    }

2、實(shí)現(xiàn)JsonConverter,將原先enum轉(zhuǎn)換結(jié)果改成{Value:[int],ShowValue:[string]}

 public class EnumLocalizationConverter : JsonConverter    {        public override bool CanConvert(Type objectType)        {            return objectType.IsEnum;        }        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)        {            try            {                var value = serializer.Deserialize<EnumLocalization>(reader);                return Enum.Parse(objectType, value.Value.ToString());            }            catch            {            }                        return Enum.Parse(objectType, serializer.Deserialize(reader).ToString());        }        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)        {            var type = value.GetType();            var fieldName = type.GetEnumName(value);            if (fieldName != null)            {                var localozation = type.GetField(fieldName).GetCustomAttribute<LocalizationAttribute>();                serializer.Serialize(writer, new { Value = value, ShowValue = localozation.ShowValue });            }            else            {                serializer.Serialize(writer, new EnumLocalization() { Value = value, ShowValue = string.Empty });            }        }    }
    public class EnumLocalization    {        public object Value { get; set; }        public string ShowValue { get; set; }    }

3、實(shí)現(xiàn)Enum靜態(tài)擴(kuò)展功能(獲取標(biāo)記上的文本)

    public static class EnumLocalizationExtensions    {        public static string ToLocalizationString(this Enum _this)        {            var type = _this.GetType();            return type.GetField(_this.ToString()).GetCustomAttribute<LocalizationAttribute>().ShowValue;        }        public static IDictionary<int, string> GetLocalizations(this Enum _this)        {            var type = _this.GetType();            var arr = type.GetEnumValues();            Dictionary<int, string> dict = new Dictionary<int, string>();            foreach (int i in arr)            {                var enumValue = Enum.Parse(type, i.ToString()) as Enum;                dict.Add(i, enumValue.ToLocalizationString());            }            return dict;        }    }

4、使用

   public enum LogType    {        [Localization("登錄")]        Login = 1,        [Localization("退出")]        Exit = 2,        [Localization("添加")]        Add = 3,        [Localization("刪除")]        Delete = 4,        [Localization("修改")]        Edit = 5,        [Localization("測(cè)試")]        Test = 6,        [Localization("異常")]        Exception = 7    }
  public class Log    {        public int Id { get; set; }        public UserModel User { get; set; }        [JsonConverter(typeof(EnumLocalizationConverter))]        public LogType Type { get; set; }        public Guid UId { get; set; }        public string Summary { get; set; }        public string Clientip { get; set; }        public string ServerName { get; set; }        public DateTime CreateDT { get; set; }    }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 额济纳旗| 赤峰市| 娄烦县| 闻喜县| 信宜市| 建平县| 富蕴县| 峡江县| 黎平县| 库车县| 海原县| 出国| 秦皇岛市| 南开区| 华宁县| 会同县| 沈阳市| 晋宁县| 丹阳市| 大荔县| 苏尼特左旗| 洛浦县| 乌兰察布市| 安溪县| 阿合奇县| 万安县| 柳河县| 容城县| 景德镇市| 合川市| 雷山县| 石台县| 高碑店市| 贡嘎县| 定日县| 富川| 莎车县| 友谊县| 佛冈县| 丹棱县| 峨眉山市|