2017-02-08 18 views
0

'null'プロパティの値を 'null以外'の値に設定する方法を探しています。これらのプロパティはオブジェクトに関連付けられ、複数のオブジェクトのリストが存在します。オブジェクトのプロパティからヌルを削除する

私が抱えている問題は、 'null'値を 'null以外'の値に変換して、各プロパティのタイプが異なる場合です。

私が今まで持っていたのは、ヌルプロパティを識別してnull以外に設定しようとして、いくつかのネストされたループと条件です。

//loop through each object 
for (int i = 0; i < objectList.Count; i++) 
{ 
    //loop through each object and each field within that object 
    foreach (var property in objectList[i].GetType().GetProperties()) 
    { 
     var current_field_val = property.GetValue(objectList[i], null); 

     //null validation 
     if (current_field_val == null) 
     { 
      PropertyInfo current_field_data_type = objectList[i].GetType().GetProperty(property.Name); 

      if (current_field_data_type is String) 
      { 
       objectList[i].GetType().GetProperty(property.Name).SetValue(objectList[i], ""); 
      } 
      else if (current_field_data_type is int) 
      { 
       objectList[i].GetType().GetProperty(property.Name).SetValue(objectList[i], 0); 
      } 
      else if (current_field_data_type is double) 
      { 
       objectList[i].GetType().GetProperty(property.Name).SetValue(objectList[i], 1); 
      } 
      else if (current_field_data_type is object) 
      { 
       objectList[i].GetType().GetProperty(property.Name).SetValue(objectList[i], ""); 
      } 
     } 
    } 
} 

私の貧弱なインデントは許されません。VSは前後にコピーするとうまくいきませんでした。

+0

クリーンアップのおかげで@Damian! – user3801447

+0

あなたの質問は何ですか?期待どおりに動かないのは何ですか? – InBetween

+3

これは非常に悪い考えです。 intとdoublesは、nullとすることもできます。基本的には、デザインの初期段階では間違っていました。これは厄介なハックです。 –

答えて

0

デフォルト以外のnullの値をに設定する方法をお探しの場合は、参照型の場合は不運になります。指定された参照型に対してnull以外のデフォルト値を与える一般的なメカニズムはありません。デフォルト値は正確にnullです。

扱う必要のある種類のセットが有限で管理しやすいものなら、おそらくそれぞれの特定のケースをコーディングできます。

これはかなり奇妙なようです。何を正確に達成しようとしていますか?問題を解決するには、より良い方法があります。

+0

問題は、JSONから非直列化されたオブジェクトを使用してHTMLを生成することですが、nullがあればHTMLを生成できません値。このため、私は、HTMLを生成する際にnullを削除することを試みています。私は2の間の選択肢があり、これで始まった。 – user3801447

0

この問題を回避する最も良い方法は、デシリアライゼーションプロセスで作成されるオブジェクトのコンストラクタ/デフォルト値を作成し、次にこの質問に記載されている設定(Why when I deserialize with JSON.NET ignores my default value?)を使用することです。デフォルトのコンストラクタが使用され、null値は無視されます。

objectsList = JsonConvert.DeserializeObject<List<RootObject>>(json_string, new JsonSerializerSettings 
    { 
       DefaultValueHandling = DefaultValueHandling.Populate, 
       NullValueHandling = NullValueHandling.Ignore 
     } 

); 
関連する問題