检查对象列表所有属性包含null然后从c#中删除列表

时间:2016-11-10 10:06:50

标签: c# json asp.net-mvc

我有一个json数据列表,我在类对象列表中反序列化,但如果proerties名称与json数据不匹配,则取值为null。

enter image description here Json数据来自url,因为用户依赖用户可以输入任何数据然后我将做什么来验证在属性不匹配时处理null。 sampleJson数据列表如下:

# The character set that we're using to iterate.
$CharacterSet  = 'abcdefg';
$chr_array = str_split($CharacterSet);

foreach($chr_array as $Character){
//do whatever with character, everytime it will provide the next one when foreach loop continues
}

我的模型类似于

{{1}}
  

我的问题是如果在对象列表中,如果对象所有属性都包含空值,则从列表中删除。

2 个答案:

答案 0 :(得分:1)

要在这种特定情况下进行过滤,您只需应用一点LINQ:

adsImportEntityList = Converter.Deserialize<List<AdsImportEntity>>(adsJson)
                               .Where(x => !(x.AdsTitle == null
                                             && x.Description == null
                                             && ...))
                               .ToList();

如果需要多个位置,过滤器可以使用帮助:

static bool NotAllFieldsNull(AdsImportEntity x) {
  return !(x.AdsTitle == null
           && x.Description == null
           && ...);
}

adsImportEntityList = Converter.Deserialize<List<AdsImportEntity>>(adsJson)
                               .Where(NotAllFieldsNull)
                               .ToList();

如果知道的一组类型需要这个,那么重载NotAllFieldsNull。如果它需要适用于任何(参考)类型,你需要反思。

答案 1 :(得分:0)

虽然我确定你可以反映这些属性,但我会在模型中添加另一个属性来检查是否有任何值。

e.g。

public bool HasValues
{
    get
    {
        return !string.IsNullOrWhiteSpace(this.AdsTitle) ||
               !string.IsNullOrWhiteSpace(this.Description) ||
               this.ToDateTime.HasValue ||
               ... etc ...
    }
}

然后当我有我的列表时,我会用Linq删除它们,如:

adsImportEntityList = adsImportEntityList.Where((e) => e.HasValues).ToList();