2011-03-31 177 views
26

在我的一個應用程序中,我收到了webrequest的響應。這項服務是RESTful服務,將返回類似下面的JSON格式結果:閱讀HttpwebResponse json響應,C#

{ 
    "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" 
    } 
} 

這裏是我當前的代碼:

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? 

      } 

     } 

    } 

我怎樣才能讀取響應?我想要的網址和用戶名。

+1

這可能是一個好主意,檢查出Restsharp做你的休息服務電話https://github.com/johnsheehan/RestSharp/wiki/Getting-Started將使你的生活100000x更容易沿着軌道,你可以設置對象模型進行解碼。 – anthonyvscode 2011-03-31 00:24:09

回答

48

首先,你需要一個對象

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

然後在這裏

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)); 
     } 

    } 

我還沒有跟你有分層對象進行測試,但是這應該給你訪問到你想要的屬性。

JavaScriptSerializer System.Web.Script.Serialization

+0

感謝您的回覆。說實話,我對這個問題有點懶。幾個月前,我爲Google URL Shortener API創建了一個包裝器,我也使用了System.Web.Extensions庫。 – tugberk 2011-03-31 07:42:19

+0

我已經試過你的代碼,但給出錯誤「沒有超載方法'反序列化'採取'2'參數」我想念什麼? – 2014-06-16 08:46:33

+0

此代碼已超過3年。現在可能有更好的方法來做到這一點。我也不知道是什麼版本的JavaScriptSerializer。它可能已經改變了? – 2014-07-01 15:23:32

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/開始使用編輯。