¿Cuál es la mejor práctica para recuperar valores JSON que ni siquiera existen en C# utilizando Json.NET?Obtiene el valor de JToken que puede no existir (mejores prácticas)
En este momento estoy tratando con un proveedor JSON que devuelve JSON que algunas 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 conseguir un doble):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Ahora que funciona bien, pero cuando hay una gran cantidad de ellos es engorroso. Terminé escribiendo un método de extensión, y solo después de escribiendo 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 bastante unos cuantos 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í está un ejemplo del uso del método de extensión:
width = jToken.GetValue<double>("width", 100);
Por cierto, por favor perdona lo que puede ser una pregunta muy tonta, ya que parece que algo debe haber una función incorporada para ... Intenté Google, y Json.NET documentación, sin embargo, o soy inepto t encontrar la solución a mi pregunta o no está claro en la documentación.
Sé que es un poco tarde, pero es posible que desee probar esta versión simplificada del 'GetValue' continuación –