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

首頁 > 學院 > 開發設計 > 正文

C#遍歷Object各個屬性含List泛型嵌套。

2019-11-14 16:01:29
字體:
來源:轉載
供稿:網友

   同事遇到一個問題:在做手機app接口時,返回JSON格式,json里面的數據屬性均是string類型,但不能出現NULL(手機端那邊說處理很麻煩,哎)。Model已經創建好了,而且model的每個屬性均是string類型。數據層使用EF。數據庫也有些字段可為空。這時,需要大量的驗證屬性是否為NULL,并將屬性值為NULL的轉換成"".

   解決方案:1遍歷model各個屬性,當為NULL時,賦值"".2.支持泛型List<model>的嵌套。

  前提條件:model的值只有這幾種,List<model> ,string ,多層嵌套。

  于是寫了如下代碼遍歷屬性,遇到很多問題,初稿,臨時用,后面完善。

  


 

        /// <summary>        /// 去除model屬性為null 的情況,把null改成""。。該方法僅用在屬性均為string類型的情況,主要用于手機APP。 chj 2015-5-7 17:39:21        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="inputModel"></param>        /// <returns></returns>        public static object CJRemoveNULLByRecursive(object obj)        {            Type t = obj.GetType();            var typeArr = t.GetPRoperties();             object tempItem;//應對屬性含有參數時。            if (obj != null )            {                foreach (var pi in typeArr)                {                      //當屬性為字符串時                    if (pi.PropertyType == typeof(string))                    {                        if (pi.GetValue(obj, null)==null)                        {                             pi.SetValue(obj, "", null);                        }                     }                    //當該屬性為List泛型時,或者為引用類型,數組時。這里好像有個屬性可以直接判斷                    else if(pi.PropertyType.IsGenericType||pi.PropertyType.IsArray||pi.PropertyType.IsClass)//.GetType()=typeof(Nullable))                    {                      var  paras=  pi.GetIndexParameters(); //索引化屬性的參數列表                      if (paras.Count()> 0)                      {                          int i = 0;                          tempItem = pi.GetValue(obj, new object[] { 0 });                            while (tempItem!=null)                          {                              pi.SetValue(obj, CJRemoveNULLByRecursive(tempItem), new object[] { i });                              i++;                              try                              {                                 tempItem = pi.GetValue(obj, new object[] { i });                                }                              catch (Exception)                              {                                  break;                               }                           }                       }                      else                      {                          pi.SetValue(obj, CJRemoveNULLByRecursive(pi.GetValue(obj, null)), null);                      }                     }                                      }            }            else            {                return "";            }                       return obj;        }

  由于可能嵌套多層,使用遞歸。

 

   臨時方案,留在這,后面不定期完善中。。。

 

 

 

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康保县| 江津市| 泰来县| 扎兰屯市| 玛纳斯县| 台北市| 阿勒泰市| 泾川县| 长丰县| 平武县| 青川县| 扶风县| 桐梓县| 老河口市| 巴林右旗| 吴桥县| 探索| 息烽县| 鹤山市| 莱芜市| 隆林| 平昌县| 建湖县| 天全县| 建水县| 凌云县| 西城区| 萍乡市| 龙南县| 泸西县| 龙州县| 汝州市| 横峰县| 鲁山县| 彩票| 准格尔旗| 天柱县| 西峡县| 大方县| 平利县| 勃利县|