Zugriff auf untergeordnete Wert von JSON in C#
public static void apiCall2()
{
WebClient c = new WebClient();
var data = c.DownloadString(baseURL + endPoint + "?access_key=" + accessKey + "¤cies=TWD&source=USD&format=1");
//Console.WriteLine(data);
JObject api = JObject.Parse(data);
string conversion = "";
foreach (var result in api["quotes"])
{
System.Console.WriteLine(result);
conversion = (string)result["USDTWD"];
System.Console.WriteLine(conversion);
}
}
Wann immer ich dieses einfache JSON-API-Aufruf-code, den ich erhalten eine Fehlermeldung, die der
Nicht Zugriff auf die untergeordneten Wert auf Newtonsoft.Json.Linq -.JProperty.
Den USDTWD (der einzige Abschnitt in [quotes] nennen soll, ein Doppelzimmer gibt den Wechselkurs von USD in TWD und sogar versucht anzurufen, es als string scheint nicht zu helfen.
- Können Sie einige Antwort-Beispiele?
- Hier ist der link zu der JSON-Datei, die es aufruft. Alles was ich versuche zu tun ist, erhalten die USDTWD als verdoppeln. apilayer.net/api/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Aufruf
foreach (var result in api["quotes"])
Sie zum Durchlaufen der child-Objekte, der 'quotes'JObject
eine von denen ist dieJProperty
mit Eigenschaft name 'USDTWD'. Man setzt dann, dassJProperty
imresult
variable. Dann hier:Sie versuchen, Zugriff auf die
USDTWD
Eigenschaft vonresult
aberresult
keinenUSDTWD
Eigenschaft, da es ist dieUSDTWD
Eigenschaft. Daher die Ausnahme.Wenn Sie müssen nur den Wert der
USDTWD
Eigenschaft können Sie ersetzen Sie Ihren foreach-Schleife mit diesem:result
direkt. Wennquotes
hatte mehr als eine Eigenschaft dann mitresult
in einer foreach-Schleife sinnvoll ist. Basierend auf dem Beispiel, das er zur Verfügung gestellt, obwohl, wie es aussieht, dass ist nicht der Fall. Ich würde darauf verzichten, die Schleife komplett und nur schnappen Sie sich die einzelnen Werte direkt ein.Einfach Weg ist:
Ändern:
JObject api = JObject.Parse(data);
Zu:
Ich habe einen Vorschlag, die Ihnen helfen könnten das Problem zu beheben durch die Verwendung einer Klasse mit einer Struktur, die eher als "raw" JObject. Wenn Sie eine Klasse erstellen wie:
Dann können Sie konvertieren, um das Objekt so:
Ich bin nicht sicher, ob dies für Sie zumutbar ist (z.B. könnten Sie nicht all die verschiedenen Zitate, oder Sie sind nicht alle aufgeführt). Aber es ist in der Regel ein mehr komfortables arbeiten mit Antworten als mit JObject direkt meiner Meinung nach.
P. S. Vielleicht kannst du sogar eine Liste, wie die Quotes-Eigenschaft nicht fest, aber ich bin mir nicht sicher, wie es unterstützt wird.