2013-12-04 5 views
1

Мне нужно настроить программное обеспечение, которое использует .net 2.0. Моя задача - интегрировать API JSON REST. Для этих целей я пытаюсь использовать json.net, который отлично работает для вызовов. Попытка анализа результатов я пришел с этим:Разбор JSON в C# (.NET2.0/JSON.NET35)

using (StreamReader responseReader = new StreamReader(webStream)) 
{ 
    try 
    { 
      JsonTextReader jsonreader = new JsonTextReader(responseReader); 
      while (jsonreader.Read()) 
      { 
      if (jsonreader.Path == "data.key" && jsonreader.TokenType == JsonToken.String) return jsonreader.Value.ToString(); 
      } 
      throw new Exception("no token found in answer"); 
    } 
    catch (Exception) 
    { 
      // error handling 
      throw; 
    } 
} 

Это прекрасно работает на более новых версиях Json.NET. К сожалению, JsonTextReader.Path недоступен в этой версии (3.5), и нет возможности обновиться. Как я могу проанализировать результат, чтобы получить данный токен под ключом data-> keys?

Реакция выглядит следующим образом

{ "статус": { "код": 0, "httpStatus": 200, "Текст": "Заявка успешно представила", "успех" : истинный}, "данные": { "ключ": "dIwbU9ZjQDH6P95aMqs% 2Bh% AKLA22% 2ByeY2R7PC6IknkWC% 2BlrmcN% 2Blm5F3WNBa027gTm% 0D% 0A2zp5NGC1X2NON72A7N% 2BZjB2fxJizUg0paiVdWlv4K1ZSKLlIGprTVoaMHqA1% 0D% 0AcfCHnV6E% 0D% 0A" }, "успех": истинный}

ответ

0

Json.Net v3.5 довольно старый, но что-то вроде этого должно работать.

Заменить это:

while (jsonreader.Read()) 
{ 
    if (jsonreader.Path == "data.key" && jsonreader.TokenType == JsonToken.String) 
     return jsonreader.Value.ToString(); 
} 

с этим:

JObject obj = JObject.Parse(json); 
return obj["data"]["key"].ToString(); 
+0

Спасибо, это очень полезно! Для добавления: tokenstring в этом примере может быть получена responseReader.ReadToEnd() –