Was ist die beste Vorgehensweise zum Abrufen von JSON-Werten, die möglicherweise nicht einmal in C # mit Json.NET vorhanden sind? ?
Im Moment habe ich es mit einem JSON-Anbieter zu tun, der JSON zurückgibt, das manchmal bestimmte Schlüssel / Wert-Paare enthält und manchmal nicht. Ich habe diese Methode (möglicherweise falsch) verwendet, um meine Werte abzurufen (Beispiel für das Abrufen eines Double):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Das funktioniert gut, aber wenn es viele gibt, ist es umständlich. Am Ende habe ich eine Erweiterungsmethode geschrieben, und erst nachdem ich sie geschrieben habe, habe ich mich gefragt, ob ich vielleicht dumm war ... hier ist die Erweiterungsmethode (ich schließe nur Fälle für Double und String ein, aber in Wirklichkeit habe ich einige Mehr):
public static T GetValue<T>(this JToken jToken, string key,
T defaultValue = default(T))
{
T returnValue = defaultValue;
if (jToken[key] != null)
{
object data = null;
string sData = jToken[key].ToString();
Type type = typeof(T);
if (type is double)
data = double.Parse(sData);
else if (type is string)
data = sData;
if (null == data && type.IsValueType)
throw new ArgumentException("Cannot parse type \"" +
type.FullName + "\" from value \"" + sData + "\"");
returnValue = (T)Convert.ChangeType(data,
type, CultureInfo.InvariantCulture);
}
return returnValue;
}
Und hier ist ein Beispiel für die Verwendung der Erweiterungsmethode:
width = jToken.GetValue<double>("width", 100);
Übrigens, bitte verzeihen Sie, was eine wirklich dumme Frage sein kann, da es so aussieht, als ob es eine eingebaute Funktion für ... geben sollte. Ich habe Google und die Json.NET- Dokumentation ausprobiert , bin jedoch entweder nicht in der Lage , die Lösung für diese zu finden meine Frage oder es ist nicht klar in der Dokumentation.
GetValue
unten ausprobieren