2017-01-25 12 views
0

Ich arbeite mit einem API Rest und es gibt mir zwei Arten von JSON, Objekt und Array.Wie weise ich ein einzelnes Objekt einer Liste zu?

Object (Wenn nur ein Datensatz in der Datenbank):

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

Array (Wenn es mehr als ein Datensatz in der Datenbank):

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

Der Code, den ich verwende verbrauchen die json wie folgt:

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); 
       } 

wenn es um einen jSON-Array kommt, wenn ich es zu einem Listview hinzufügen:

myList.ItemsSource = jsonArray.listArray; 

Aber wenn es ein Objekt ist, kann ich nicht und ich erhalte den folgenden Fehler:

Cannot implicitly convert type Object to IEnumerable.

+0

das, weil 'list' an diesem Punkt ist ein' RootObject' ist, fügen Sie das Objekt zu einer Liste/Array/Sammlung und weisen Sie dann, dass Sammlung zu Ihrer 'ItemSource' – SushiHangover

+1

Haben Sie eine Kontrolle über die API? Wenn Sie das tun, würde ich empfehlen, dass Sie nicht zwei verschiedene Objekte vom selben Endpunkt zurückgeben. Es sollte immer ein Array zurückgeben, auch wenn nur ein Datensatz in der Datenbank vorhanden ist. Es sollte Sie davon abhalten, diese Überprüfungen durchzuführen. –

+0

Ihr Beitrag ist eine Beobachtung. Was ist die Frage? :-) Wie ordne ich ein einzelnes Objekt einer Liste zu? Wie ändere ich den Json, damit es funktioniert? Wie ändere ich die RESTful-API, um etwas anderes zurückzugeben? Oder einfach: Warum funktioniert es nicht? – Krumelur

Antwort

0

Schließlich konnte ich meine Fehler lösen, war es nur eine Frage der eine Liste Erstellen und Hinzufügen das deserialisierte JSON-Objekt.

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

Die Klasse das JSON-Objekt deserialisieren:

public class RootObject 
{ 
    [JsonProperty("complain")] 
    public Complain ComplainObject { get; set; } 
} 
Verwandte Themen