Jaka jest najlepsza praktyka pobierania wartości JSON, które mogą nawet nie istnieć w języku C # przy użyciu Json.NET ?
W tej chwili mam do czynienia z dostawcą JSON, który zwraca JSON, który czasami zawiera pewne pary klucz / wartość, a czasami nie. Używałem (być może niepoprawnie) tej metody, aby uzyskać moje wartości (przykład dla uzyskania podwójnego):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Teraz to działa dobrze, ale gdy jest ich dużo, jest to kłopotliwe. Skończyło się na napisaniu metody rozszerzającej i dopiero po jej napisaniu zastanawiałem się, czy może nie byłem głupi ... tak czy inaczej, oto metoda rozszerzająca (uwzględniam tylko przypadki dla double i string, ale w rzeczywistości mam sporo więcej):
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;
}
A oto przykład użycia metody rozszerzenia:
width = jToken.GetValue<double>("width", 100);
Swoją drogą , proszę wybaczyć to, co może być naprawdę głupie pytanie, bo wygląda na to, że coś powinno mieć wbudowaną funkcję dla ... Wypróbowałem Google i dokumentację Json.NET , ale nie jestem w stanie znaleźć rozwiązania moje pytanie lub nie jest to jasne w dokumentacji.
GetValue
poniżej