2017-01-25 20 views
0

我正在使用API​​休息,它返回兩種類型的json,對象和數組。如何將單個對象分配給列表?

對象(當僅存在一個數據庫中的記錄):

{ "complain": { "id": "1" , "description": "hello", "date": "2017-01-24 11:46:22", "Lat": "20.5204446", "Long": "-100.8249097" } } 

陣列(當存在於數據庫中的多個記錄):

{ "complain": [ { "id": "1" , "description": "hello", "date": "2017-01-24 11:46:22", "Lat": "20.587446", "Long": "-100.8246490" }, { "id": "2" , "description": "hello 2", "date": "2017-01-24 11:50:12", "Lat": "20.529876", "Long": "-100.8249097" } ] } 

我使用的代碼消耗JSON如下:

content = await response.Content.ReadAsStringAsync(); 

var token = JToken.Parse(content); 

       if (token["complain"] is JArray) 
       { 
        var jsonArray = JsonConvert.DeserializeObject<RootArray>(content); 
       } 
       else if (token["complain"] is JObject) 
       { 
        var jsonObject = JsonConvert.DeserializeObject<RootObject>(content); 
       } 

當涉及到一個JSON數組,如果我可以將其添加到列表視圖:

myList.ItemsSource = jsonArray.listArray; 

但是,如果它是一個對象,我不能,我收到以下錯誤:

Cannot implicitly convert type Object to IEnumerable.

+0

這是因爲'list'在這一點上是一個'RootObject',這個對象添加到列表/數組/集合,然後分配一個收集到你的'ItemSource' – SushiHangover

+1

你有任何控制的API?如果你這樣做,我會建議你不要從同一個終點返回兩個不同的對象。它應該總是返回一個數組,即使數據庫中只有一條記錄。它應該阻止你不必做這些檢查。 –

+0

您的帖子是一個觀察。問題是什麼? :-)如何將單個對象分配給列表?如何更改Json使其工作?如何更改RESTful API以返回不同的內容?或者只是:爲什麼它不起作用? – Krumelur

回答

0

最後我能解決我的錯誤,這只是一個創建列表和添加的物質反序列化的json對象。

var jsonObject = JsonConvert.DeserializeObject<RootObject>(content); 
List<Complain> simpleList = new List<Complain>(); 
simpleList.Add(jsonObject.ComplainObject); 
myList.ItemsSource = simpleList; 

反序列化JSON對象類:

public class RootObject 
{ 
    [JsonProperty("complain")] 
    public Complain ComplainObject { get; set; } 
} 
相關問題