Какая наилучшая практика для получения значений JSON, которые могут даже не существовать на С#, используя Json.NET?
Сейчас я имею дело с провайдером JSON, который возвращает JSON, который иногда содержит определенные пары ключ/значение, а иногда и нет. Я использовал (возможно, неправильно) этот метод для получения моих значений (пример для получения двойного):
if(null != jToken["width"])
    width = double.Parse(jToken["width"].ToString());
else
    width = 100;
Теперь это прекрасно работает, но когда их много, это громоздко. Я закончил писать метод расширения, и только после, написав его, я задался вопросом, может быть, я был глупым... в любом случае, вот метод расширения (я включаю только случаи для double и string, но в действительности у меня есть еще немало):
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, однако я либо не способен найти решение моего вопроса, либо неясно в документации.