Qual è la procedura migliore per il recupero dei valori JSON che potrebbero non esistere nemmeno in C # utilizzando Json.NET ?
In questo momento ho a che fare con un provider JSON che restituisce JSON che a volte contiene determinate coppie chiave / valore e talvolta no. Ho usato (forse in modo errato) questo metodo per ottenere i miei valori (esempio per ottenere un doppio):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Ora funziona bene, ma quando ce ne sono molti è ingombrante. Ho finito per scrivere un metodo di estensione, e solo dopo averlo scritto mi sono chiesto se forse stavo facendo lo stupido ... comunque, ecco il metodo di estensione (includo solo casi per double e string, ma in realtà ne ho parecchi Di Più):
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;
}
Ed ecco un esempio di utilizzo del metodo di estensione:
width = jToken.GetValue<double>("width", 100);
A proposito, per favore perdona quella che potrebbe essere una domanda davvero stupida, dal momento che sembra che dovrebbe esserci una funzione incorporata per ... Ho provato Google e la documentazione di Json.NET , tuttavia non sono in grado di trovare la soluzione per la mia domanda o non è chiara nella documentazione.
GetValue
seguito