Яка найкраща практика для отримання значень JSON, які можуть навіть не існувати в C # за допомогою Json.NET ?
Зараз я маю справу з провайдером JSON, який повертає JSON, який іноді містить певні пари ключ / значення, а іноді - ні. Я використовував (можливо, неправильно) цей метод, щоб отримати свої значення (приклад отримання подвійного):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Зараз це добре працює, але коли їх багато, це громіздко. Я закінчив писати метод розширення, і лише після його написання мені було цікаво, чи, можливо, я був дурним ... так чи інакше, ось метод розширення (я включаю лише випадки для подвійних і рядкових, але насправді у мене досить багато більше):
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;
}
Ось приклад використання методу розширення:
width = jToken.GetValue<double>("width", 100);
До речі, вибачте, що може бути насправді тупим питанням, оскільки, здається, щось має бути вбудованою функцією для ... Я намагався Google і документацію Json.NET , однак я або недосвідчений у пошуку рішення моє запитання чи незрозуміло в документації.
GetValueнижче