泛型属性遍历

转载: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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值