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

C# 对象的检查列表所有属性都包含null,然后从c中的列表中删除#,c#,json,asp.net-mvc,C#,Json,Asp.net Mvc,我在类对象列表中反序列化了json数据列表,但如果proerties名称与json数据不匹配,则值为null Json数据来自url,因为依赖于用户的用户可以输入任何数据,然后当属性不匹配时,我将进行验证以处理null。 sampleJson数据列表如下所示: [{"adsname":"Francis","adsimageurl":"Andrew Love.jpg","ontop":false,"key":30012647,"onscan":true,"adscode":6689390,"br

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

Json数据来自url,因为依赖于用户的用户可以输入任何数据,然后当属性不匹配时,我将进行验证以处理null。 sampleJson数据列表如下所示:

[{"adsname":"Francis","adsimageurl":"Andrew Love.jpg","ontop":false,"key":30012647,"onscan":true,"adscode":6689390,"brandname":{"adsbrand":"Beth Moon"},"category":"New ads","adsscription":"Weinstein Jacob Sutton","from":"2016-12-30T00:00:00","to":"2016-12-30T00:00:00"},{"adsname":"McKay","adsimageurl":"Lorraine Spencer.jpg","ontop":false,"key":136301519,"onscan":true,"adscode":346146503,"brandname":{"adsbrand":"Russell Warner"},"category":"New ads","adsscription":"Stanton Thomas Moran","from":"2016-12-30T00:00:00","to":"2016-12-30T00:00:00"},{"adsname":"Berger","adsimageurl":"Lois Norton.jpg","ontop":false,"key":32971839,"onscan":false,"adscode":334075948,"brandname":{"adsbrand":"Becky Park"},"category":"New ads","adsscription":"Gallagher Matthew Pitts","from":"2016-12-30T00:00:00","to":"2016-12-30T00:00:00"},{"adsname":"Boswell","adsimageurl":"Constance Scarborough.jpg","ontop":false,"key":183877654,"onscan":true,"adscode":230154009,"brandname":{"adsbrand":"Yvonne Hardy"},"category":"New ads","adsscription":"Riddle Nancy Atkins","from":"2016-12-30T00:00:00","to":"2016-12-30T00:00:00"}]
我的模型属性类

public class AdsImportEntity
{
    [JsonProperty(PropertyName = "title")]
    public string AdsTitle { get; set; }

    [JsonProperty(PropertyName = "description")]
    public string Description { get; set; }

    [JsonProperty(PropertyName = "barcode")]
    public string Barcode { get; set; }

    [JsonProperty(PropertyName = "top")]
    public bool? Top { get; set; }

    [JsonProperty(PropertyName = "fromdatetime")]
    public System.DateTime? FromDatetime { get; set; }

    [JsonProperty(PropertyName = "todatetime")]
    public DateTime? ToDatetime { get; set; }

    [JsonProperty(PropertyName = "httpimageurl")]
    public string HttpImageUrl { get; set; }
}
我的问题是,若在对象列表中,若对象的所有属性都包含空值,则从列表中删除


虽然我相信您可以通过属性进行反映,但我会向模型添加另一个属性,以检查是否存在任何值

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();

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

adsImportEntityList = Converter.Deserialize<List<AdsImportEntity>>(adsJson)
                               .Where(x => !(x.AdsTitle == null
                                             && x.Description == null
                                             && ...))
                               .ToList();
adsImportEntityList=Converter.Deserialize(adsJson)
.其中(x=>!(x.adsttitle==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();
静态bool notallfieldsnall(AdsImportEntity x){
返回!(x.adsttitle==null
&&x.Description==null
&& ...);
}
adsImportEntityList=Converter.Deserialize(adsJson)
.Where(不包括所有字段)
.ToList();

如果一组已知的类型需要此选项,则重载
notallfieldsnall
。如果它需要用于任何(引用)类型,则需要进行反射。

仅用于
adsmimportentity
的实例或任何对象?对于列表中的任何对象,您可以通过迭代对象属性来执行此操作。下面是一个如何使用
propertyinfo
类执行此操作的示例:。因此,您只需迭代列表并迭代列表对象的所有属性。在那里,您可以检查它们是否为null并删除该对象。但是,如果导入json的记录太多,那么检查每个属性的每个对象会降低性能,您可以在反序列化json时检查null值。因此,您不会删除“null”对象,而是甚至不会将它们添加到列表中。