วิธีรับสตริง json จาก url


145

ฉันเปลี่ยนรหัสฟอร์ม XML เป็น JSON

แต่ฉันไม่พบวิธีรับสตริง JSON จาก URL ที่ระบุ

URL เป็นดังนี้: " https://api.facebook.com/method/fql.query?query=.....&format=json "

ฉันใช้ XDocuments มาก่อนฉันสามารถใช้วิธีโหลดได้:

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

อะไรที่เทียบเท่ากับวิธีนี้สำหรับ JSON ฉันกำลังใช้ JSON.NET

คำตอบ:


270

ใช้WebClientคลาสในSystem.Net:

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

โปรดทราบว่านั่นWebClientคือIDisposableดังนั้นคุณอาจเพิ่มusingคำสั่งนี้ในรหัสการผลิต จะมีลักษณะดังนี้:

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

8
ทำไมคุณข้ามคำสั่งการใช้ที่ใช้ในคำตอบจากจอน?
Skuli

1
มันไม่ได้ทำงานสำหรับฉันจนกว่าฉันจะใส่var json = wc.DownloadString("url");ในtry-catchบล็อก!
อเล็กซ์ Jolig

ฉันพบข้อผิดพลาด "HttpRequestException: ไม่สามารถกำหนดที่อยู่ที่ร้องขอ" .. นี่คือ URL: " localhost: 5200 / testapi / swagger / v1 / swagger.jsonแต่ใช้งานได้กับ URL: petstore.swagger.io/v2/swagger.json
อุเทน

102

AFAIK JSON.Net ไม่มีฟังก์ชันการทำงานสำหรับการอ่านจาก URL ดังนั้นคุณต้องทำสองขั้นตอน:

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

1
@jsmith: มันไม่ได้เป็นข้อเสนอแนะ ... OP ดังกล่าวมัน :)
จอน

ขอบคุณที่ช่วยฉันมันแปลกที่ฉันไม่พบสิ่งนี้ใน google จริง ๆ นี่เป็นคำถามพื้นฐานใช่ไหม? ตอนนี้ฉันมีข้อผิดพลาดเช่น: ไม่สามารถยกเลิกการทำให้วัตถุ JSON เป็นประเภท 'System.String' ได้ ฉันรู้ว่ามันเป็นคุณสมบัติบางอย่างในชั้นเรียนของฉันที่ไม่ถูกต้องประกาศ แต่ฉันก็ไม่สามารถหาได้ แต่ฉันยังคงพยายาม! :)
ThdK

45

หากคุณใช้. NET 4.5 และต้องการใช้ async คุณสามารถใช้HttpClientในSystem.Net.Http:

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

    // Now parse with JSON.Net
}

1
คุณต้องใช้มันTaskด้วยasync
Si8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.