C# ดึงข้อมูล JSON จาก Web API

C# ดึงข้อมูล JSON จาก WEB API

C# ดึงข้อมูล JSON จาก Web API

หากพูดถึง Web API ที่ให้บริการในการดึงข้อมูลบ้างอย่างที่เราต้องการ สมัยนี้ format ข้อมูลที่ได้จากการเรียกใช้งาน Web API ที่นิยมเป็นส่วนใหญ่ก็จะอยู่ในรูปแบบ JSON (JavaScript Object Notation)

ที่มีโครงการข้อมูลที่รองรับความซับซ้อนหลายชั้น ซึ่งในบทความนี้ผมจะลองใช้ C# ในการดึงข้อมูล Web API ที่เป็น JSON แปลงมาเป็น Object Class  เพื่อนำมาใช้งาน ซึ่งตัวอย่างนี้จะทำการสร้าง Window Application ดึงข้อมูลจาก typicode.com ที่ให้บริการทดสอบสร้างแบบจำลองการสร้าง web response ต่างๆ ทำให้ข้ามขั้นตอนการสร้าง Web Service ที่จะ response ข้อมูลออกมาเป็น JSON ได้เลยครับ เรามาเริ่มกันเลยดีกว่า

C# ดึงข้อมูล JSON จาก WEB API
สร้าง New Project

โดยผมทำการสร้าง New Project เป็น Windows Forms Application ที่มีชื่อว่า FetchJSON จากนั้นทำการสร้างปุ่มเพื่อคลิกใช้งาน API ที่เราต้องการดึงข้อมูลแบบ JSON

C# ดึงข้อมูล JSON จาก WEB API
สร้างปุ่ม

จากนั้นก็ double click ที่ปุ่มเพื่อเขียนโค้ด Event เมื่อทำการคลิกปุ่มโดยมีจะทำการดึงข้อมูลจาก URL นี้ครับ

http://jsonplaceholder.typicode.com/posts

ซึ่งมีโค้ดดังต่อไปนี้

[sourcecode language=”C#”]

private void btnFetch_Click(object sender, EventArgs e)
{
string URL = “http://jsonplaceholder.typicode.com/posts”;
WebClient wc = new WebClient();
string json = wc.DownloadString(URL);
Console.WriteLine(json);
}

[/sourcecode]

C# ดึงข้อมูล JSON จาก WEB API

เมื่อลองรันโปรแกรมดูก็จะได้ผลลัพธ์เหมือนกับที่เราเรียก URL ผ่าน Web Browser เลยโดยผลลัพธ์ในโค้ดนั้นจะเก็บในตัวแปร json แล้ว writeline ออกมานั้นเอง แต่การดึงข้อมูลจาก JSON ยังไม่จบต้องมีการแปลงค่าเอาไปใช้ก่อน ซึ่งผมจะทำการแปลงชุดข้อมูลที่เป็น string ให้เป็น object class โดยต่อจากนี้ให้ไปที่ Tool -> NuGet Package Manager -> Manage NuGet Packages for Solution.. เพื่อทำการลง package เกี่ยวกับ JSON

C# ดึงข้อมูล JSON จาก WEB API

พิมพ์ในช่อง Search ว่า JSON แล้วจะเจอ Json.net ที่มี Id: Newtonsoft.Json ตามรูปจากนั้นกด install ครับ

C# ดึงข้อมูล JSON จาก WEB API

C# JSON

ยังเหลืออีกอย่างที่ต้องติดตั้งคือ System.Json  ถ้าหาก using System.Json; แล้วไม่เจอให้ไปที่ Tool -> NuGet Package Manager ->Package Manager Console แล้วติดตั้ง System.Json โดยใช้คำสั่ง

[sourcecode]

Install-Package System.Json -Version 4.0.20126.16343

[/sourcecode]
ตามภาพด้านบนเลยครับ
เมื่อติดตั้งเสร็จแล้วเราก็จะเริ่มสร้าง class เพื่อที่จะได้สร้าง object มารองรับข้อมูล Json กันนะครับ สังเกตข้อมูลที่ได้จาก URL ข้อมูล 1 ชุด

[sourcecode]
{
“userId”: 1,
“id”: 1,
“title”: “sunt aut facere repellat provident occaecati excepturi optio reprehenderit”,
“body”: “quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto”
}
[/sourcecode]

จะประกอบด้วย userId, id, title, body เพราะฉะนั้น class เลยต้องมี attribute พวกนี้ด้วยแต่ไม่จำเป็นต้องสร้างให้ครบก็ได้นะครับ ใช้แค่ไหนสร้างแค่นั้น ซึ่งผมจะทำการสร้าง Class ที่มีชื่อว่า Post.cs

C# ดึงข้อมูล JSON จาก WEB API

โดยมีโค้ดดังนี้

[sourcecode language=”C#”]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FetchJSON
{
class Post
{
public int userId;
public int id;
public string title;
public string body;
}
}

[/sourcecode]

จะเห็นว่า attribute class นี้ผมสร้างตามข้อมูล Json หมดและกำหนดให้เป็น public ทุกตัวเพื่อที่เวลาแปลงจะได้แปลงง่ายไม่ติดปัญหาของการ encapsulation ของ object class นั้นเอง

ต่อไปจะเป็นโค้ดเพิ่มเติมตอนกด event ปุ่มนั้นเองมีโค้ดดังนี้ครับ

[sourcecode language=”C#”]

private void btnFetch_Click(object sender, EventArgs e)
{
string URL = “http://jsonplaceholder.typicode.com/posts”;
WebClient wc = new WebClient();
string json = wc.DownloadString(URL);
Console.WriteLine(json);
JsonArray jsonObj = (JsonArray)JsonObject.Load(wc.OpenRead(URL));
List listPost = JsonConvert.DeserializeObject>(jsonObj.ToString());
}

[/sourcecode]

จากโค้ดจะเห็นว่ามีการเพิ่มมา 2 บรรทัดเพื่อทำการแปลง Json เป็น Object Class โดยใช้ method JSONObject.Load โดยส่งค่า Stream ที่ได้จาก wc.OpenRead(URL) นั้นเอง แล้วการใช้คำสั่ง JsonObject.Load ต้องตรวจสอบก่อนว่า Json ที่เราจะดึงข้อมูลนั้นเป็น JsonObject หรือ JsonArray สังเกตดังนี้ครับ

C# ดึงข้อมูล JSON จาก WEB API

ถ้าอยู่ในเครื่องหมาย [] ก็จะเป็น Json Array และถ้าอยู่ใน {} จะเป็น Json Object ครับผม  เพราะฉะนั้นในโค้ดเลยแปลงเป็น JsonArray แล้วหลังจากนั้นทำการ ใช้คำสั่ง JsonConvert.DeserializeObject เป็น List ของ Object Class Post ที่เราสร้างไว้เพราะจากข้อมูลจะสังเกตเห็นว่าใน Json Array มี Json Object หลายๆอันเหลือเกิน เมื่อลอง Debug และรันดูก็จะได้ดังภาพด้านล่างครับ

C# ดึงข้อมูล JSON จาก WEB API

จะเห็นว่าเราได้ List ที่เก็บ Object Class Post มา 100 จากนั้นจะเอาไปเก็บลง Database หรือทำอะไรต่อก็แล้วแต่เลยครับ ผมขอจบบทความนี้ไว้แค่นี้ก่อนเจอกันใหม่บทความหน้าครับ

 

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *