programing

HttpClient에서 JSON 문자열을 해석하려면 어떻게 해야 하나요?

megabox 2023. 3. 15. 19:31
반응형

HttpClient에서 JSON 문자열을 해석하려면 어떻게 해야 하나요?

외부 API를 호출하여 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": []
      }
    ]
  },
  "entities": [],
  "dialog": {
    "prompt": "1",
    "parameterName": "1",
    "parameterType": "1::1",
    "contextId": "11",
    "status": "1"
  }
}}

사용하고 있다HttpClient접속에 어려움을 겪고 있다.prompt키밸류갖고싶다prompt부터dialog어떻게 구할 수 있죠?

떠오르는 세 가지 방법이 있습니다.

  1. json이 일관성이 있고 응답 구조가 자주 바뀌지 않는다고 가정하면, 저는 json2csharp 또는 jsonutils와 같은 도구를 사용하여 c# 클래스를 만듭니다.

    그 후, 전화:

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

    이렇게 하면 강력한 유형의 개체를 사용할 수 있습니다.

  2. 클래스 생성을 건너뛰고 동적 개체를 사용할 수 있습니다.

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

    및 다음과 같은 속성에 액세스합니다.

    obj.dialog.prompt;
    
  3. JObject를 사용하여 문자열을 사용하여 속성에 액세스할 수 있습니다.

    JObject obj = JsonConvert.DeserializeObject(result);
    
    obj["dialog"]["prompt"]
    

편집:

뉴턴소프트를 수입하다.제이슨

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

여기를 참조해 주세요.http://www.newtonsoft.com/json/help/html/deserializeobject.htm

XML과 동일한 구조로 클래스를 만듭니다. 그러면 변수가s는 이 클래스의 인스턴스로 json을 클래스 구조로 역직렬화할 수 있습니다.

당신의 경우, 당신의 재산은s.dialog.prompt.

NuGet 패키지 Microsoft 를 인스톨 합니다.AspNet.WebApi.클라이언트:

PM> Install-Package Microsoft.AspNet.WebApi.Client

포함:

using Newtonsoft.Json;

내용을 JObject로 직접 읽으면 한 단계를 절약할 수 있습니다.

dynamic response = await response.Content.ReadAsAsync<JObject>();
string prompt = response.dialog.prompt.ToString();

주의: 응답 내용은 Content-Type "application/json"이어야 합니다.

언급URL : https://stackoverflow.com/questions/39468096/how-can-i-parse-json-string-from-httpclient

반응형