Понадобилось достать несколько значений из JSON-файла, искал, чем это сделать и нашел просто офигенную библиотеку Json.NET. Это не просто парсер, это целый набор инструментов: парсер, сериализаторы, десериализаторы, конвертеры. Кроме банального вытаскивания значений, можно формировать JSON, конвертировать его в XML и XML в JSON, обращаться к объектам JSON через запрос SelectToken или LINQ. А можно и просто вытащить нужное значение, обращаясь к полям JSON, используя встроенные функции объектов.
Несомненный плюс библиотеки в том, что даже в последней версии она поддерживает .NET Framework 2.0 Правда нельзя будет использовать синтаксис LINQ, но и без него инструментов хватает.
С помощью JObject и JToken
1. Подключаем библиотеку для своего Framework’а через References и в исходнике:
using Newtonsoft.Json.Linq;
2. Загружаем JSON в переменную, например из файла.
3. Парсим JSON в JObject:
JObject JSONObj = JObject.Parse(JSONBuf);
JObject.Parse может вызвать exception, если есть синтаксические ошибки в JSON, так что лучше поместить его в try...catch:
public static JObject ParseJSON(string JSONBuf)
{
    JObject JSONObj = null;
    try
    {
        JSONObj = JObject.Parse(JSONBuf);
    }
    catch (Exception ex)
    {
        Console.WriteLine("ERROR: " + ex.Message);
        return null;
    }
    return JSONObj;
}
Пример реакции на ошибку синтаксиса:
Invalid character after parsing property name. Expected ':' but got: {. Path description.languages', line 15, position 9.
4. Далее, можно вытащить значение поля JSON в объект JToken помощью функции JSONObj.GetValue(FieldName);, если поле со значением находится сразу в корне JSON, как, например, api_uri в этом примере, то JToken можно сразу преобразовать в строку с помощью функции .ToString:
JToken tok = JSONObj.GetValue("api_uri");
tok.ToString();
Однако, если поле отсутствует, то это вызовет exception:
В экземпляре объекта не задана ссылка на объект.
Этого можно избежать, отловив исключение в try...catch, либо проверив наличие поля функцией JObject.ContainsKey("имя_поля") перед вызовом GetValue, либо воспользовавшись функцией TryGetValue вместо GetValue
Примеры кода на PasteBin
Тестовый проект
Если же нужное значение находится где-то глубоко в недрах JSON, то необходимо воспользоваться функцией JObject.SelectToken() Пример в официальной документации Копия
Как я уже говорил, инструмент очень мощный, так что лучше начать с изучения официальной документации