2013-04-22 114 views
12

我有一個JSON響應,我試圖用RestSharp反序列化,它看起來是這樣的:基於RestSharp反序列化JSON的陣列

{"devices":[{"device":{"id":7,"deviceid":"abc123","name":"Name"}}, 
      {"device":{"id":1,"deviceid":"def456","name":"Name"}}], 
"total":2, 
"start":0, 
"count":2} 

關閉的一些建議,我發現,我已經試過設置我的POCO這樣的:

public class DevicesList 
{ 
    public List<DeviceContainer> Devices; 
} 

public class DeviceContainer 
{ 
    public Device Device; 
} 

public class Device 
{ 
    public int Id { get; set; } 
    public string DeviceId { get; set; } 
    public string Name { get; set; } 
} 

然後我執行的是這樣的:

// execute the request 
var response = client.Execute<DevicesList>(request); 

何wever,response.Data是NULL,並且我嘗試了其他變體而沒有運氣。

那麼,什麼類結構和映射應該用於這種情況?我也嘗試過,沒有額外的DeviceContainer班。

感謝您的幫助。

+0

可能是你應該加總,開始和計數屬性deviceslist類。 – Vladimir 2013-04-22 21:14:16

回答

16

RestSharp 在性能運行時,它不會反序列化的字段,所以請確保您DevicesDevice領域轉換爲性能。

此外,請仔細檢查響應的Content-Type,如果響應是非默認響應,則RestSharp可能完全不使用JsonDeserializer。見我在RestSharp client returns all properties as null when deserializing JSON response

+0

就是這樣。愚蠢的錯誤忘記了'{get;組; }'。一旦我補充說,它完美運作。謝謝! – 2013-04-23 00:26:08

2

RestShartp不支持DataAnnotation /數據成員,沒有少校重命名你的屬性:

  • 設備 - >設備
  • 設備 - >設備

,不要忘了{get; set;} )。

21

答案我有一個稍微不同的問題,當我反序列化的POCO包含數組..

改變它Devices[]List<Devices>解決這個問題,它正確地反序列化。

+0

謝謝,剛剛碰到這個,你的修復解決了它 – mahonya 2015-02-04 18:56:05

+3

'IEnumerable <>'和'IList <>'也不管用。您需要'List <>' – 2015-09-25 10:42:50

3

我遇到的一件事情是,如果你使用如IEnumerable或IList這樣的接口,它不起作用,它必須是一個具體的類型。

這將無法正常工作,因爲它爲其他json序列化程序(如json.net)所做的工作。

public class DevicesList 
{ 
    public IEnumerable<DeviceContainer> Devices { get; set; } 
} 

public class DeviceContainer 
{ 
    ... 
} 

它必須是這樣的:

public class DevicesList 
{ 
    public List<DeviceContainer> Devices { get; set; } 
} 

public class DeviceContainer 
{ 
    ... 
} 
+0

如果您爲JsonDeserializer使用更新版本的RESTSharp(例如不使用JSON.NET),這會有所幫助 – Skyguard 2015-06-12 19:49:30