2016-03-25 29 views
0

Ich habe ein Problem mit JSON Antwort in meiner neuen JSON-Datei.Xamarin android JSON Antwort

Task<string> downloadTask = httpClient.GetStringAsync(myJsonFile); 
      string content = await downloadTask; 
      var Messages = new List<NotificationClass>(); 
      JObject jsonResponse = JObject.Parse(content); 
      IList<JToken> results = jsonResponse["Messages"].ToList(); 

// Das ist meine alte Arbeits JSON-Datei

"Messages":[ 
{"MessageID" : "1", 
"Name" : "Test", 
"Subject" : "Subject", 
"Message" : "Message", 
"DateTimeCreated" : "19/03/2016" 
}, 
{ 
"MessageID" : "2", 
"Name" : "Test2", 
"Subject" : "Subject2", 
"Message" : "Message2", 
"DateTimeCreated" : "18/03/2016" 
}] 

Ich möchte jedoch ohne die Header-Antwort von json bekommen „Nachrichten“ wie Code unten Ist es noch möglich? Was sollte ich in JsonResponse["?"].ToList();

[{"MessageID" : "1", 
"Name" : "Test", 
"Subject" : "Subject", 
"Message" : "Message", 
"DateTimeCreated" : "19/03/2016" 
}, 
{ 
"MessageID" : "2", 
"Name" : "Test2", 
"Subject" : "Subject2", 
"Message" : "Message2", 
"DateTimeCreated" : "18/03/2016" 
}] 

Dank. Damian.

+0

Haben Sie eine Kontrolle über den Server? Nicht, dann ist Ihr einziger Ansatz, den Client-JSON zu ändern, wenn Sie ihn deserialisieren, was Sie bereits tun. – Jason

+0

Danke :) Das heißt, dass es besser wäre, es zu benutzen, dass meine alte Arbeits-JSON-Datei, anstatt zu versuchen, die andere Arbeit richtig zu machen? Was ist die bestmögliche Lösung? –

Antwort

0

Auf Ihrem ursprünglichen json befand sich die Liste der Nachrichten in einem Feld namens "messages". Aus diesem Grund mussten Sie [Nachrichten] ausführen, um den JToken zu erhalten, der dem Hauptteil des Schlüssels "messages" entspricht.

Da Sie nun direkt eine Liste auf der höheren Ebene haben, ist es wahrscheinlich einfacher, direkt auf JsonConvert zuzugreifen, indem Sie Ihre Zeichenfolge in eine List of Message-Objekte deserialisieren (Message ist eine Klasse mit Feldern namens MessageID, Name, Thema usw.).

List<Message> message = JsonConvert.DeserializeObject<List<Message>>(content); 

Beachten Sie auch, dass, wenn Sie diesen Ansatz folgen, und Ihre Nachricht Klasse Felder mit etwas anderen Namen als die Json, müssen Sie Anmerkungen hinzufügen, um den richtigen Namen für die Parse-Bereitstellung, wie:

[JsonProperty("MessageID")] 
public string MessageId { get; set; } 

auf jeden Fall, wenn Sie lieber würde auf andere Weise zum Parsen, ist es wahrscheinlich besser, nur meistens, wenn möglich, Ihren alten json zu halten, weil benannte Felder sind Keyless-namenlos Objekte immer bevorzugt nur mit.

+0

Vielen Dank für die Erklärung. Wenn ich dies jedoch tue, habe ich einen Fehler "JObject enthält keine Definition für ToList" –

+0

@ fisher1 Ich habe meine Antwort mit einem anderen Ansatz aktualisiert. – Disruption

+0

Danke :) Ich habe versucht, vorgeschlagene Lösung zu verwenden, aber ich erhalte einen Fehler Kann Typ 'namespace.Message' nicht implizit in 'System.Collection.Generic List ' –