Parse JSON bằng C#
Trong web, bạn có thể chuyển đổi file JSON qua object rất nhanh chóng bằng javascript. Vậy còn trong windows form, cách chuyển đổi sẽ như thế nào? Đó là nội dung của bài viết này.
JSON là gì? JSON có dùng để làm gì? JSON có lợi ích như thế nào?... Mọi câu hỏi các bạn có thể tham khảo tại đây. Rất đầy đủ và dễ hiểu nên mình không nhắc lại nữa.
Giao diện
Mình tạo 1 ứng dụng windows form với giao diện như sau
Tạo file JSON
Đơn giản là bạn chỉ cần viết nội dung file json vào notepad và lưu với phần mở rộng là *.json. Nội dung file json của mình như sau:
Code
Để đơn giản, mình tạo 1 lớp Employee để lưu thông tin 1 Employee như sau
Sự kiện click của button Parse được viết như sau (chú ý những dòng in đậm)
- Dòng 7: Đầu tiên là đọc nội dung file json, file này được đặt trong cùng thư mục với file .exe. Cần phải
using namespace System.IO;
để sử dụng StreamReader. - Dòng 11: Tạo 1 đối tượng JavaScriptSerializer để thực hiện việc chuyển đổi file json.
add reference System.Web.Extensions
- Dòng 15: Chuyển đổi nội dung của chuỗi (string) json thành một đối tượng dynamic (dynamic là 1 từ khóa, không phải là 1 kiểu dữ liệu, cũng giống như từ khóa var). Tham khảo dynamic tại đây *trollface*.
- Bắt đầu từ dòng 18, sau khi chuyển đổi file json, obj được coi như 1 mảng và ta lấy dữ liệu như 1 mảng bình thường. Ở đây mình sẽ lấy ra mỗi Employee và thêm vào 1 danh sách, sau đó mới đưa danh sách này lên RichTextbox. Làm như vậy để các bạn biết được cách lấy 1 object từ 1 đối tượng dynamic thôi, bởi vì tới dòng 21 các bạn có thể thêm ngay vào RichTextbox cũng được.
Kết quả
Chú ý
- Cần file bẫy lỗi trong quá trình đọc file
- Cần xét các trường hợp obj null hoặc đọc không có field đó. VD
obj["employees"][i]["address"]
sẽ báo lỗi. - Cuối cùng, dynamic là 1 thằng vừa-dễ-vừa-khó sử dụng, cho nên phải cẩn thận khi dùng kiểu dynamic
Source code
Update later
Trên đây là cách parse json đơn giản bằng c#, hiện nay, thao tác với json đã có thư viện newtonsoft json rất hiệu quả, bạn có thể tham khảo bằng link dưới
tsasdasdasd test
ReplyDeleteSao không download được source code vậy
DeleteCái này đơn giản mà, hoàn toàn có thể tự viết được :v
DeleteSource code mình quên chưa upload =))
mình đang tìm hiểu nên gà mờ quá. có thể post cho mình tham khảo được k?
DeleteMà cho mình hỏi, mình muốn lấy dữ liệu từ rest service xuống data thì làm thế nào :3
DeleteĐơn giản thôi, tìm hiểu bài này nhé http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC-and-WebAP
Deletehoặc dựa vào đoạn code mẫu sau
public HttpClient client = new HttpClient();
public WebApiClient()
{
client.BaseAddress = new Uri("http://localhost:62387/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
public List GetAll(String requestUrl)
{
var response = client.GetAsync(requestUrl).Result;
if (response.IsSuccessStatusCode)
{
var students = response.Content.ReadAsAsync>().Result;
return students;
}
return null;
}
Cảm ơn bạn.. Cho mình hỏi rtbResult là cái gì
DeleteAppendText thì cần add thư viện gì.
rtbResult là cái richtextbox hiển thị ra đó. AppendText là phương thức của cái control đó thôi, không cần thư viện nào nữa.
Deletebài này bạn viết rất hay viết code rất khoa học. Nhưng viết sai vài chỗ chắc bạn viết chay chưa debug
ReplyDeletehehe, thanks bác đã góp ý. Mình sẽ xem lại và update chỗ sai ^^.
Deletebạn giải thích giúp mình line 19 với, mình không hiểu < là gi vậy ?
ReplyDeletehi My, chỗ đó là 1 vòng for bình thường (lỗi hiển thị thôi)
Deletefor (int i = 0; i < len; i++) { ... }