C \ # Object 의 각 속성 을 옮 겨 다 니 며 List 범 형 끼 워 넣 기 를 포함 합 니 다.

3113 단어
동료 가 문제 에 부 딪 혔 습 니 다. 핸드폰 app 인 터 페 이 스 를 만 들 때 JSON 형식 으로 돌아 갑 니 다. json 의 데이터 속성 은 모두 string 형식 이지 만 NULL 이 나타 나 면 안 됩 니 다.Model 이 만 들 어 졌 고 model 의 모든 속성 은 string 형식 입 니 다.데이터 계층 에서 EF 를 사용 합 니 다.데이터베이스 에 도 일부 필드 가 비어 있 습 니 다.이 때 속성 이 NULL 인지 여 부 를 대량으로 검증 하고 속성 값 을 NULL 로 변환 해 야 합 니 다.
   솔 루 션: model 의 각 속성 을 옮 겨 다 니 며 NULL 일 때 값 을 부여 합 니 다. 2. 범 형 List 의 끼 워 넣 기 를 지원 합 니 다.
  전제조건: model 의 값 은 이 몇 가지 뿐 입 니 다. List, string, 다 층 끼 워 넣 기.
  그래서 다음 과 같은 코드 를 써 서 속성 을 옮 겨 다 니 며 많은 문제 가 발생 했 습 니 다. 초고, 임시 사용, 뒤에 보완 되 었 습 니 다.
  
 
        /// 
        ///   model   null    , null  ""。。          string     ,      APP。 chj 2015-5-7 17:39:21
        /// 
        /// 
        /// 
        /// 
        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;
        }

여러 겹 으로 끼 워 넣 을 수 있 기 때문에 재 귀 를 사용 합 니 다.
 
임시 방안 은 여기에 두 고, 뒤에 비정 기적 으로 보완 중...
 
 
 
  
다음으로 전송:https://www.cnblogs.com/sword85/p/4490975.html

좋은 웹페이지 즐겨찾기