Làm thế nào để có được một chuỗi json từ url?


145

Tôi đang chuyển đổi mẫu mã XML của mình sang JSON.

Nhưng tôi không thể tìm thấy cách lấy chuỗi JSON từ một url đã cho.

URL giống như thế này: " https://api.facebook.com/method/fql.query?query=.....&format=json "

Tôi đã sử dụng XDocument trước đây, ở đó tôi có thể sử dụng phương thức tải:

XDocument doc = XDocument.load("URL");

Tương đương với phương thức này cho JSON là gì? Tôi đang sử dụng JSON.NET.

Câu trả lời:


270

Sử dụng WebClientlớp trong System.Net:

var json = new WebClient().DownloadString("url");

Hãy ghi nhớ rằng WebClientIDisposable, vì vậy bạn có lẽ sẽ thêm một usingtuyên bố điều này trong mã sản xuất. Điều này sẽ trông giống như:

using (WebClient wc = new WebClient())
{
   var json = wc.DownloadString("url");
}

8
Tại sao bạn bỏ qua câu lệnh sử dụng được sử dụng trong câu trả lời từ Jon?
Skuli

1
Nó không làm việc cho tôi cho đến khi tôi đặt var json = wc.DownloadString("url");trong try-catchblock!
Alex Jolig

Tôi đã tìm thấy lỗi "HttpRequestException: Không thể gán địa chỉ được yêu cầu" .. đây là URL: " localhost: 5200 / testapi / swagger / v1 / swagger.json , nhưng nó hoạt động với URL: petstore.swagger.io/v2/swagger.json
Uthen

102

AFAIK JSON.Net không cung cấp chức năng để đọc từ một URL. Vì vậy, bạn cần phải làm điều này trong hai bước:

using (var webClient = new System.Net.WebClient()) {
    var json = webClient.DownloadString(URL);
    // Now parse with JSON.Net
}

1
@jsmith: Đó không phải là một gợi ý ... OP đã đề cập đến nó :)
Jon

Thx đã giúp tôi, Thật lạ là tôi đã không tìm thấy điều này trên google, đây thực sự là một câu hỏi cơ bản phải không? Bây giờ tôi đang gặp một lỗi như: Không thể khử lưu trữ đối tượng JSON thành loại 'System.String'. Tôi biết rằng đó là một thuộc tính trong lớp của tôi không được khai báo đúng, nhưng tôi không thể tìm thấy thuộc tính nào. Nhưng tôi vẫn đang cố gắng! :)
ThdK

45

Nếu bạn đang sử dụng .NET 4.5 và muốn sử dụng async thì bạn có thể sử dụng HttpClienttrong System.Net.Http:

using (var httpClient = new HttpClient())
{
    var json = await httpClient.GetStringAsync("url");

    // Now parse with JSON.Net
}

1
Bạn phải sử dụng nó trong một Taskvớiasync
Si8
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.