2016-11-10 60 views
2

我有json數據的列表我有deserialize類對象列表但如果proerties名稱與json數據不匹配它需要值爲null。檢查對象的所有屬性列表包含空然後從列表中刪除c#

enter image description here Json的數據來自於用戶依賴的用戶可以輸入任何數據然後我會做驗證處理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; } 
} 

我的問題是,如果在對象的列表中,如果對象的所有屬性包含空值,然後從列表中刪除。

+0

僅針對'AdsImportEntity'或任何對象的實例? – Richard

+0

對於列表 –

+0

中的任何對象,都可以通過迭代對象屬性來完成此操作。這裏是一個如何用'propertyinfo'類來實現的例子:[link](http://stackoverflow.com/questions/957783/loop-through-an-objects-properties-in-c-sharp)。所以你只需迭代你的列表並迭代列表對象的所有屬性。在那裏你可以檢查它們是否爲空並移除該對象。 – Jenism

回答

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。如果需要爲任何(參考)類型工作,則需要反思。

0

雖然我確定您可以通過屬性來反映,但我會在模型中添加另一個屬性來檢查是否有任何值。

例如

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(); 
相關問題