Ich versuche, eine API zu verwenden, die die folgende Beispielstruktur für ihren zurückgegebenen JSON verwendet
[
{
"customer":{
"first_name":"Test",
"last_name":"Account",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3545134,
"created_at":"2013-08-06T15:51:15-04:00",
"updated_at":"2013-08-06T15:51:15-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
},
{
"customer":{
"first_name":"Test",
"last_name":"Account2",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3570462,
"created_at":"2013-08-12T11:54:58-04:00",
"updated_at":"2013-08-12T11:54:58-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
}
]
JSON.net würde mit so etwas wie der folgenden Struktur großartig funktionieren
{
"customer": {
["field1" : "value", etc...],
["field1" : "value", etc...],
}
}
Aber ich kann nicht herausfinden, wie ich es schaffen kann, mit der bereitgestellten Struktur zufrieden zu sein.
Bei Verwendung des Standardwerts JsonConvert.DeserializeObject (Inhalt) wird die richtige Anzahl von Kunden ermittelt, aber alle Daten sind null.
Wenn Sie eine Kundenliste (unten) ausführen, wird die Ausnahme "Das aktuelle JSON-Array kann nicht deserialisiert werden" ausgelöst
public class CustomerList
{
public List<Customer> customer { get; set; }
}
Gedanken?
Antworten:
Sie können ein neues Modell erstellen, um Ihren Json zu deserialisieren
CustomerJson
:Und Sie können Ihren JSON einfach deserialisieren:
Ich hoffe es hilft !
Dokumentation: Serialisieren und Deserialisieren von JSON
quelle
DeserializeObject()
ist langsam auf Android-Handys mit ARM. Gibt es eine bessere Lösung für diesen Fall?JObject.Parse(json);
Verwenden Sie für diejenigen, die keine Modelle erstellen möchten, den folgenden Code:
Hinweis: Dies funktioniert nicht für Ihre JSON-Zeichenfolge. Dies ist keine allgemeine Lösung für eine JSON-Struktur.
quelle
var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
IEnumerable
Implementierungen (3 im Vergleich zu einer Liste <Tupel>). Zweitens impliziert Ihre Lösung zwei unterschiedliche Schlüssel - 1 für jedes Wörterbuch. Was passiert, wenn mehrere Kunden denselben Vornamen haben? Es würde keine Unterscheidung bei den Schlüsseln geben. Ihre Lösung berücksichtigt diesen Konflikt nicht.var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
würde funktionieren. Anscheinend funktioniert es nichtWenn Sie die akzeptierte Antwort verwenden, müssen Sie mit jedem auf jeden Datensatz zugreifen
Customers[i].customer
, und Sie benötigen eine zusätzlicheCustomerJson
Klasse, was etwas ärgerlich ist. Wenn Sie das nicht möchten, können Sie Folgendes verwenden:Beachten Sie, dass ich
List<>
ein Array und kein Array verwende. Erstellen Sie nun die folgende Klasse:quelle
Leichte Änderung an dem, was oben angegeben wurde. Mein Json-Format, das validiert wurde, war
Mit der Antwort von AlexDev habe ich dieses Looping für jedes Kind durchgeführt und daraus einen Leser erstellt
quelle
Weitere Modifikationen von JC_VA, nehmen Sie, was er hat, und ersetzen Sie den MyModelConverter durch ...
Dies sollte für json funktionieren
oder
Sie werden beide analysiert, als ob sie es wären
quelle