2012-11-22 31 views
8

Tôi đang cố gắng để tải về một chuỗi JSON trong Windows App Store của tôi mà sẽ trông như thế này:Tải về một JSON String trong C#

{ 
"status": "okay", 
"result": {"id":"1", 
      "type":"monument", 
      "description":"The Spire", 
      "latitude":"53.34978", 
      "longitude":"-6.260316", 
      "private": "{\"tag\":\"david\"}"} 
} 

nhưng tôi nhận được những gì trông giống như thông tin về máy chủ. Đầu ra tôi nhận được như sau:

Response: StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    MS-Author-Via: DAV 
    Keep-Alive: timeout=15, max=100 
    Connection: Keep-Alive 
    Date: Thu, 22 Nov 2012 15:13:53 GMT 
    Server: Apache/2.2.22 
    Server: (Unix) 
    Server: DAV/2 
    Server: PHP/5.3.15 
    Server: with 
    Server: Suhosin-Patch 
    Server: mod_ssl/2.2.22 
    Server: OpenSSL/0.9.8r 
    X-Powered-By: PHP/5.3.15 
    Content-Length: 159 
    Content-Type: text/json 
} 

Tôi đã xem xét và thấy rằng WebClient đã được sử dụng trước Windows 8 và bây giờ được thay thế bằng HttpClient. Vì vậy, thay vì sử dụng DownloadString(), tôi đã sử dụng Content.ReadAsString(). Dưới đây là chút mã tôi có cho đến thời điểm này:

public async Task<string> GetjsonStream() 
{ 
    HttpClient client = new HttpClient(); 
    string url = "http://(urlHere)"; 
    HttpResponseMessage response = await client.GetAsync(url); 
    Debug.WriteLine("Response: " + response); 
    return await response.Content.ReadAsStringAsync(); 
} 

Bất kỳ ai biết tôi đang ở đâu sai? Cảm ơn bạn trước!

+0

Vì bạn không sử dụng phản hồi cho bất kỳ điều gì khác. Tại sao bạn không chỉ sử dụng ['HttpClient.GetStringAsync'] (http://msdn.microsoft.com/en-us/library/hh551746.aspx)? – khellang

Trả lời

14

Bạn đang xuất ra phản hồi của máy chủ. Phản hồi của máy chủ chứa StreamContent (xem tài liệu here) nhưng điều này StreamContent không xác định ToString, vì vậy tên lớp là đầu ra thay vì nội dung.

ReadAsStringAsync (tài liệu here) là phương pháp phù hợp để lấy lại nội dung do máy chủ gửi lại. Bạn nên in giá trị trả lại của cuộc gọi này thay thế:

public async Task<string> GetjsonStream() 
{ 
    HttpClient client = new HttpClient(); 
    string url = "http://(urlHere)"; 
    HttpResponseMessage response = await client.GetAsync(url); 
    string content = await response.Content.ReadAsStringAsync(); 
    Debug.WriteLine("Content: " + content); 
    return content; 
} 
+0

Cảm ơn emartel. Giờ thì tôi đã hiểu. Tôi đã không có nội dung thực tế trong một chuỗi và dòng bạn thêm vào trong cung cấp một cách cho nó để sản xuất chuỗi chính xác .. tôi nghĩ rằng đó là những gì bạn có ý nghĩa. :) Lưu tôi rất nhiều đau và nhức đầu mặc dù! Cảm ơn một lần nữa! –

Các vấn đề liên quan