Quelle est la meilleure pratique pour récupérer des valeurs JSON qui n'existent même pas en C # à l'aide de Json.NET ?
Pour le moment, j'ai affaire à un fournisseur JSON qui renvoie JSON qui contient parfois certaines paires clé / valeur, et parfois non. J'ai utilisé (peut-être incorrectement) cette méthode pour obtenir mes valeurs (exemple pour obtenir un double):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Maintenant cela fonctionne bien, mais quand il y en a beaucoup, c'est encombrant. J'ai fini par écrire une méthode d'extension, et ce n'est qu'après l'avoir écrite que je me suis demandé si j'étais peut-être stupide ... de toute façon, voici la méthode d'extension (je n'inclus que des cas pour double et string, mais en réalité j'en ai pas mal plus):
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;
}
Et voici un exemple d'utilisation de la méthode d'extension:
width = jToken.GetValue<double>("width", 100);
BTW, veuillez pardonner ce qui peut être une question vraiment stupide, car il semble qu'il devrait y avoir une fonction intégrée pour ... J'ai essayé la documentation Google et Json.NET , mais je suis soit incapable de trouver la solution à ma question ou ce n'est pas clair dans la documentation.
GetValue
ci