同事遇到一个问题:在做手机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;
}

  由于可能嵌套多层,使用递归。

   临时方案,留在这,后面不定期完善中。。。

C#遍历Object各个属性含List泛型嵌套。的更多相关文章

  1. javascript 遍历object对象

    (function(){ var str = ''; for(var i in obj){ //遍历object str += '\n'+(i+' : '+obj[i]); // i+' : '+ob ...

  2. 面向对象中Object常用属性总结

    学完Object属性,自己总结一些常用是Object常用属性. Object.prototype:属性表示Object的原型对象. 属性: Object.prototype.constructor:特 ...

  3. js遍历Object所有属性

    在js中经常需要知道Object中的所有属性及值,然而若是直接弹出Object,则是直接显示一个对象,它的属性和值没有显示出来, 不是我们想要的结果,从而需要遍历Object的所有属性. var ob ...

  4. JS遍历对象的属性和值

    对于需要动态获取对象的某些属性和对应的值的时候,就需要遍历对象的属性和值. const user = { name: '张三', age: 20, addr: '湖北武汉', sex: '男' } / ...

  5. js object 对象 属性和方法的使用

    //object 对象 属性和方法的使用 var person = new Object(); person.name="张海"; person.age="; perso ...

  6. js动态参数作为Object的属性取值

    js动态参数作为Object的属性取值var myObj = {"a":1,"b":2};var a = 'a';myObj[a] 就可以获取到 属性a的值了

  7. for/in 循环遍历对象的属性

    for/in 语句循环遍历对象的属性. js中获取key得到某对象中相对应的value的方法:obj.key js中根据动态key得到某对象中相对应的value的方法有二: 一.var key = & ...

  8. JS如何遍历Object中的所有属性?

    JS如何遍历Object中的所有属性? var params = ""; for(var i in baseParams){ params += "&" ...

  9. Java中HashMap(泛型嵌套)的遍历

    //Studnet package yzhou.gen03; public class Student<T> { private T score; public T getScore() ...

随机推荐

  1. ado.net 数据库连接的两方式种

    DataAdapter: string connectionString = "data source=127.0.0.1;Database=dong;user id=sa;password ...

  2. displaytag 添加超链接

    方法1:在<display:column>中使用属性autolink="true",不过这条属性只对两种情况起作用:网址和邮箱,如果只是普通字符串,那么还是普通字符串, ...

  3. iOS 使用GitHub托管代码(github desktop使用)

    iOS 使用GitHub托管代码 代码托管 1.首先得有一个GitHub的账号,没有的话就去https://github.com注册一个吧. 2.下载GitHub Mac客户端:http://mac. ...

  4. java下radomAccessFile文件写入读取

    package cn.stat.p2.demo; import java.io.FileNotFoundException; import java.io.IOException; import ja ...

  5. 概率dp小结

    好久之前学过,记得是一次亚洲区的前几天看了看概率dp,然后亚洲区就出了一道概率dp,当时虽然做上了,但是感觉有很多地方没懂,今天起早温习了一下,觉得很多地方茅塞顿开,果然学习的话早上效果最好了. 首先 ...

  6. SVN搭建本地版本控制仓库

    1.安装TortoiseSVN 2.新建一个文件夹,比如F:\SvnProjectsCfg 3.在F:\SvnProjectsCfg新建一个文件夹project1,右键该文件夹选择“create re ...

  7. Ghost克隆软件

    克隆软件Ghost初级使用教程 一.什么是Ghost ? Ghost(幽灵)软件是美国赛门铁克公司推出的一款出色的硬盘备份还原工具,可以实现FAT16.FAT32.NTFS.OS2等多种硬盘分区格式的 ...

  8. DOM 之Range(范围)

    -------<javascript高级程序设计>  12.4 范围  笔记------- DOM2级在Document类型中定义了createRange()方法,在兼容DOM的浏览器中, ...

  9. event对象具有的方法

    // dataTransfer,toElement,fromElement,y,x,offsetY,offsetX,webkitMovementY,webkitMovementX,relatedTar ...

  10. Windows server 2012 各版本 激活方法

    Windows server 2012 激活教程 本文包括以下两种版本的激活过程:(注意RC版的是不能激活的!) 1.Windows server 2012 试用版本激活 2.Windows serv ...