Qual é a prática recomendada para recuperar valores JSON que podem nem mesmo existir em C # usando Json.NET ?
No momento, estou lidando com um provedor JSON que retorna JSON que às vezes contém determinados pares de chave / valor e às vezes não. Tenho usado (talvez incorretamente) este método para obter meus valores (exemplo para obter um duplo):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Isso funciona bem, mas quando há muitos deles é complicado. Acabei escrevendo um método de extensão e só depois de escrevê-lo me pergunto se não estava sendo burro ... de qualquer forma, aqui está o método de extensão (eu só incluo casos para double e string, mas na realidade tenho alguns Mais):
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;
}
E aqui está um exemplo de uso do método de extensão:
width = jToken.GetValue<double>("width", 100);
BTW, por favor, perdoe o que pode ser uma pergunta realmente estúpida, já que parece que algo deveria haver uma função embutida para ... Eu tentei a documentação do Google e Json.NET , no entanto, sou inepto em encontrar a solução para minha dúvida ou não está claro na documentação.
GetValue
abaixo