转载:https://www.cnblogs.com/sword85/p/4490975.html
/// <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;
}