2016-09-13 3 views
4

안녕하세요, 외부 API를 호출하여 json 결과를 얻고 있습니다.Httpclient에서 JSON 문자열을 구문 분석하는 방법

 HttpClient client = new HttpClient(); 
     client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     HttpResponseMessage response = client.GetAsync(url).Result; 

     if (response.IsSuccessStatusCode) 
     { 
      var result = response.Content.ReadAsStringAsync().Result; 
      var s = Newtonsoft.Json.JsonConvert.DeserializeObject(result); 
      return "Success"; 
     } 
     else 
     { 
      return "Fail"; 
     } 

라인 내가 무엇입니까 var s = Newtonsoft.Json.JsonConvert.DeserializeObject(result);의 결과는 같다 :

{{ 
    "query": "1", 
    "topScoringIntent": { 
    "intent": "1", 
    "score": 0.9978111, 
    "actions": [ 
     { 
     "triggered": false, 
     "name": "1", 
     "parameters": [ 
      { 
      "name": "1", 
      "required": true, 
      "value": null 
      }, 
      { 
      "name": "1", 
      "required": true, 
      "value": null 
      }, 
      { 
      "name": "1", 
      "required": true, 
      "value": null 
      } 
     ] 
     } 
    ] 
    }, 
    "entities": [], 
    "dialog": { 
    "prompt": "1", 
    "parameterName": "1", 
    "parameterType": "1::1", 
    "contextId": "11", 
    "status": "1" 
    } 
}} 

이 어떻게 '대화'의 prompt받을 수 있나요? http 클라이언트를 사용하고 있습니다. 프롬프트 키 - 값에 액세스하는 데 어려움을 겪고 있습니다. 대화 상자에서 프롬프트를 얻고 싶습니다. 내가 어떻게 얻을 수 있니? http://www.newtonsoft.com/json/help/html/deserializeobject.htm

이 XML과 같은 동일한 구조를 가진 클래스를 만듭니다

+0

스레드를 차단하므로 client.GetAsync에서 .Result를 수행하면 안됩니다. –

답변

4

당신은 여기에 모습을 갖고 싶어. 그런 다음 변수 s이이 클래스의 인스턴스이며 클래스 구조에 json을 직렬화 해제 할 수 있습니다.

귀하의 경우 재산은 s.dialog.prompt이어야합니다.

3

편집 :

가져 오기 Newtonsoft.Json는

JObject s = JObject.Parse(result); 
string yourPrompt = (string)s["dialog"]["prompt"]; 
5

마음에 와서 세 가지 방법이 있습니다. json으로 가정

  1. 은 일관성과 응답의 구조는 전 C# 클래스를 만들 json2csharp 또는 jsonutils 같은 도구를 사용하는 것이 자주 변경되지 않습니다.

    는 전화 : 이것은 당신이 사용할 수있는 강력한 형식의 개체를 줄 것이다

    {GeneratedClass} obj = JsonConvert.DeserializeObject<{GeneratedClass}>(result); 
    

    .

  2. 당신은 동적 객체를 클래스 생성을 생략하고 사용할 수 있습니다

    obj.dialog.prompt; 
    
  3. 당신은하는 jobject을 사용할 수 있습니다

    액세스가 문자열

    를 사용하여 속성을 것 : 같은

    dynamic obj = JsonConvert.DeserializeObject<dynamic>(result) 
    

    및 액세스 속성

    JObject obj = JsonConvert.DeserializeObject(result); 
    
    obj["dialog"]["prompt"] 
    
관련 문제