2017-08-15 117 views
0

這是我的目標,我想從源檢索JSON數據,反序列化爲對象,根據值過濾出對象,最後將其序列化回到JSON字符串格式。這裏是(一個例子),我有什麼對JSON數據:反序列化嵌套的JSON到類/對象中,然後 - 將其序列化回字符串

[ 
    { 
     "property":"prop1", 
     "status" : { 
     status1: "A", 
     status2: -1, 
     status3: "Success", 
     }, 
     "offlist":[ 
     { 
      "description":"description blah", 
      "type":"F", 
      "values":{ 
       "value1":30.0, 
       "value2":0.0 
      } 
     }, 
     { 
      "description":"description blah", 
      "type":"F", 
      "values":{ 
       "value1":30.0, 
       "value2":0.0 
      } 
     } 
     ] 
    }, 
    { 
     "property":"prop2", 
     "status" : { 
     status1: "A", 
     status2: -1, 
     status3: "Success", 
     }, 
     "offlist":[ 
     { 
      "description":"description blah", 
      "type":"Q", 
      "values":{ 
       "value1":30.0, 
       "value2":0.0 
      } 
     } 
     ] 
    } 
] 

這裏是我的課:

public class offerModel { 
    public List<offlist> offlist { get; set; } 
    public status statuses { get; set; } 
    public string property{ get; set; } 
} 
public class offlist{ 
    public string description{ get; set; } 
    public string type{ get; set; } 
    public values values { get; set; }   
} 
public class values{ 
    public double value1 { get; set; } 
    public double value2{ get; set; } 
} 

public class statuses { 
    public string status1 { get; set; } 
    public double status2 { get; set; } 
    public string status3 { get; set; } 

} 
public class RootObj { 
    public List<offerModel> offModels { get; set; } 
} 

在反序列化到對象的嘗試,我得到5個對象後面的列表(意) ,但所有這些對象都是空的。見下圖:

var obj = JsonConvert.DeserializeObject<List<RootObj>>(jsonstring); 

然後我想刪除'type'值等於'F'的任何'offlist'對象。

刪除之後,我想再次放入JSON字符串格式,我相信它會與下面非常相似,但我無法以正確的方式將其反序列化。

var json = JsonConvert.SerializeObject(obj); 

讓我知道如果我離開的任何細節了......

+1

嘗試 'JsonConvert.DeserializeObject <列表>(jsonstring)',而不是你的JSON根objec t是一個集合,而不是收集字段中的對象的集合 – ASpirin

+0

解決您的第一個問題。當您發佈的json似乎代表一個'List '時,您正在要求反序列化一個'List '。 如何結束在結果列表中的5個空引用不會立即顯現,因爲您發佈的json看起來代表** two **'offerModel'的數組。 – Deltics

+0

可能是因爲你的json-status1..3,它們不是字符串,如果這應該是一個合法的json,它會驗證一個。 (必須在引號內) –

回答

0

更改序列化JsonConvert.DeserializeObject<List<offerModel>>(data) 和修復offerModel類屬性statusespublic statuses status { get; set; },使您的樣品deserializable 如果你想保持一個根對象你可以做下一個:

public class RootObj : List<offerModel>{} 
JsonConvert.DeserializeObject<RootObj>(data) 
+0

OMG我知道這是愚蠢的,謝謝ASpirin,很多升值! – dlimes

相關問題