2011-03-31 2 views
26

내 앱 중 하나에서 웹 요청으로부터 응답을받습니다. 이 서비스는 RESTful 서비스이며, 아래의 JSON 형식과 유사한 결과를 반환합니다HttpwebResponse json response, C#

byte[] bytes = Encoding.GetEncoding(contentEncoding).GetBytes(contents.ToString()); 
    request.ContentLength = bytes.Length; 

    using (var requestStream = request.GetRequestStream()) { 

     requestStream.Write(bytes, 0, bytes.Length); 

     using (var twitpicResponse = (HttpWebResponse)request.GetResponse()) { 

      using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) { 

       //What should I do here? 

      } 

     } 

    } 

가 어떻게 응답을 읽을 수 있습니다 : 여기

{ 
    "id" : "1lad07", 
    "text" : "test", 
    "url" : "http:\/\/twitpic.com\/1lacuz", 
    "width" : 220, 
    "height" : 84, 
    "size" : 8722, 
    "type" : "png", 
    "timestamp" : "Wed, 05 May 2010 16:11:48 +0000", 
    "user" : { 
     "id" : 12345, 
     "screen_name" : "twitpicuser" 
    } 
} 

와 내 현재 코드는? 나는 url과 username을 원한다.

+1

Restsharp를 통해 휴식 서비스 요청을 확인하는 것이 좋습니다. https://github.com/johnsheehan/RestSharp/wiki/Getting-Started를 통해 삶의 질을 100,000x로 쉽게 낮출 수 있습니다. 디코딩 할 오브젝트 모델. 답장을 보내 주셔서 감사합니다. – anthonyvscode

답변

48

먼저 여기

using (var twitpicResponse = (HttpWebResponse)request.GetResponse()) { 

     using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) { 
      JavaScriptSerializer js = new JavaScriptSerializer(); 
      var objText = reader.ReadToEnd(); 
      MyObject myojb = (MyObject)js.Deserialize(objText,typeof(MyObject)); 
     } 

    } 

나는 당신이 가지고있는 계층 개체를 테스트하지 않았습니다에 그런 객체

public class MyObject { 
    public string Id {get;set;} 
    public string Text {get;set;} 
    ... 
} 

필요하지만, 이것은 당신이 원하는 속성에 대한 액세스를 제공한다.

JavaScriptSerializer System.Web.Script.Serialization

+0

솔직히, 나는이 질문에 대해 게으르다. 몇 달 전에 Google URL Shortener API 용 래퍼를 만들었고 System.Web.Extensions 라이브러리도 사용했습니다. – tugberk

+0

나는 당신의 코드를 시도했으나 "과부하가 없다. 'Deserialize'가 '2 개의 인수를 취한다'라는 오류를 준다. –

+0

이 코드의 유효 기간은 3 년 이상입니다. 이제는 더 나은 방법이 있습니다. JavaScriptSerializer의 버전이 무엇 인지도 알지 못합니다. 변경되었을 수 있습니까? –

11

나는 RestSharp을 사용하십시오 - https://github.com/restsharp/RestSharp

에 역 직렬화하는 클래스를 만듭니다 :

public class MyObject { 
    public string Id { get; set; } 
    public string Text { get; set; } 
    ... 
} 

그리고 코드 객체를 얻기 위해 :

RestClient client = new RestClient("http://whatever.com"); 
RestRequest request = new RestRequest("path/to/object"); 
request.AddParameter("id", "123"); 

// The above code will make a request URL of 
// "http://whatever.com/path/to/object?id=123" 
// You can pick and choose what you need 

var response = client.Execute<MyObject>(request); 

MyObject obj = response.Data; 

체크 아웃을 시작하려면 http://restsharp.org/을 확인하십시오. 에드.