C#遍历Object各个属性含List泛型嵌套。
2018-06-27 09:05:38来源:未知 阅读 ()
同事遇到一个问题:在做手机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; }
由于可能嵌套多层,使用递归。
临时方案,留在这,后面不定期完善中。。。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 可保图片不变形的object-fit 2019-11-16
- vue+iview+mock模拟数据遍历 2019-09-30
- 前端面试题总结 2019-05-13
- html便民查询各个工具类实例代码分享(支持pc和移动端) 2018-06-27
- The Dangers of the Large Object Heap(转载,LOH内存碎片情 2018-06-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash