Quelle est la meilleure pratique pour récupérer des valeurs JSON qui n'existent peut-être même pas en C# à l'aide de Json.NET ?
Pour l'instant, j'ai affaire à un fournisseur JSON qui renvoie un JSON contenant 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 seulement après En écrivant cela, je me suis demandé si je n'étais pas en train d'être stupide... Quoi qu'il en soit, voici la méthode d'extension (je n'inclus que les cas pour le double et la chaîne, mais en réalité j'en ai beaucoup 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);
Pardonnez cette question qui pourrait être stupide, car il semble qu'il devrait y avoir une fonction intégrée pour cela... J'ai essayé Google, et Json.NET Cependant, soit je ne parviens pas à trouver la solution à ma question, soit elle n'est pas claire dans la documentation.
0 votes
Je sais que c'est un peu tard, mais vous pouvez essayer cette version simplifiée de
GetValue
en dessous de0 votes
string rootValue = jToken.Value<string>()