国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 重庆市| 西华县| 云龙县| 宜良县| 普兰店市| 荣成市| 前郭尔| 久治县| 丽江市| 榕江县| 华安县| 武城县| 溧水县| 淳化县| 缙云县| 化隆| 偃师市| 大港区| 抚松县| 岳阳县| 海兴县| 织金县| 哈巴河县| 开化县| 团风县| 中方县| 昌邑市| 茌平县| 台州市| 华坪县| 福清市| 偃师市| 通渭县| 郯城县| 越西县| 阿拉善右旗| 洪雅县| 汶川县| 都昌县| 福安市| 云和县|