¿Cuál es la mejor práctica para recuperar valores JSON que pueden no existir en C # usando Json.NET ?
En este momento estoy tratando con un proveedor JSON que devuelve JSON que a veces contiene ciertos pares clave / valor, y otras veces no. He estado usando (quizás incorrectamente) este método para obtener mis valores (ejemplo para obtener un doble):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Eso funciona bien, pero cuando hay muchos, resulta engorroso. Terminé escribiendo un método de extensión, y solo después de escribirlo me pregunté si tal vez estaba siendo estúpido ... de todos modos, aquí está el método de extensión (solo incluyo casos para doble y cadena, pero en realidad tengo bastantes más):
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;
}
Y aquí hay un ejemplo del uso del método de extensión:
width = jToken.GetValue<double>("width", 100);
Por cierto, perdone lo que puede ser una pregunta realmente tonta, ya que parece que debería haber una función incorporada para ... Probé la documentación de Google y Json.NET , sin embargo, no soy capaz de encontrar la solución para mi pregunta o no está clara en la documentación.
GetValue
abajo