Получить значение из JToken, которое может не существовать (рекомендации)

Как лучше всего извлекать значения JSON, которые могут даже не существовать в C#, используя Json.NET ?

Сейчас я имею дело с провайдером JSON, который возвращает JSON, который иногда содержит определенные пары ключ/значение, а иногда нет. Я использовал (возможно, неправильно) этот метод для получения своих значений (пример для получения двойного):

if(null != jToken["width"])
    width = double.Parse(jToken["width"].ToString());
else
    width = 100;

Теперь это работает нормально, но когда их много, это громоздко.Я закончил тем, что написал метод расширения, и только после его написания я задумался, может быть, я был глуп... в любом случае, вот метод расширения (я включаю только случаи для double и string, но в на самом деле у меня их гораздо больше):

public static T GetValue(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("width", 100);

Кстати, прошу прощения за может быть очень глупый вопрос, так как кажется, что должна быть встроенная функция для ... Я попробовал документацию Google и Json.NET, однако я либо не умею находить решение своего вопроса, либо в документации неясно.

106
задан svick 6 March 2012 в 18:01
поделиться