2017-01-25 19 views
0

私はAPI restで作業しています.Json、Object、およびArrayの2種類のAPIを返します。1つのオブジェクトをリストに割り当てる方法は?

オブジェクト(データベース内の1つのレコードのみが存在する場合):

{ "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" } ] } 

私が使用コード:

{ "complain": { "id": "1" , "description": "hello", "date": "2017-01-24 11:46:22", "Lat": "20.5204446", "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); 
       } 

リストビューに追加できる場合、

myList.ItemsSource = jsonArray.listArray; 

しかし、それは私ができないオブジェクトであり、私は次のエラーを取得する場合:

Cannot implicitly convert type Object to IEnumerable.

+0

その時点で 'list'は' RootObject'であるためであるリスト/配列/コレクションにそのオブジェクトを追加していることを割り当てますあなたの 'ItemSource'へのコレクション – SushiHangover

+1

あなたはAPIを支配していますか?あなたがするなら、同じエンドポイントから2つの異なるオブジェクトを返さないことをお勧めします。データベースにレコードが1つしかない場合でも、常に配列を返します。あなたがこれらのチェックをしなくてはなりません。 –

+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; } 
} 
関連する問題