Bạn cần chuyển đổi dữ liệu text dưới dạng JSON qua một đối tượng tương ứng, ví dụ sau đây sẽ giúp bạn giải quyết vấn đề trên
Ví dụ chuỗi string sau dưới dạng JSON:
{ "hoten": "Luong Cong Chien", "masv": "123456", "ngaysinh": "01/02/1987" }
Để truy xuất dữ liệu trong C#, ta có thể sử dụng 1 trong 2 cách sau đây:
Cách 1: Chuyển qua một đối tượng cụ thể:
Ở đây ta sẽ định nghĩa 1 lớp đối tượng tương ứng, cụ thể là lớp đối tượng sinhvien như sau
public class sinhvien { public string hoten{ get; set; } public string masv { get; set; } public string ngaysinh{ get; set; } }
Chuyển đổi json qua đối tượng:
using System.Web.Script.Serialization; JavaScriptSerializer jss = new JavaScriptSerializer(); sinhvien sv = jss.Deserialize<sinhvien>(JsonText);
Cách 2: Chuyển qua dạng dữ liệu động (dynamic), cách này sẽ linh động hơn:
using System.Web.Script.Serialization; JavaScriptSerializer jss = new JavaScriptSerializer(); var obj = jss.Deserialize<dynamic>(JsonText); Console.WriteLine(obj["hoten"]); //outputs Luong Cong Chien
Đối với các đối tượng phức tạp hơn, ví dụ:
{ "hoten": "Luong Cong Chien", "masv": "123456", "ngaysinh": "01/02/1987", "diachi":{"sonha":"123","quan":"govap"}, "diemthi":[{"mon":"toan","diem":"10"},{"mon":"ly","diem":"9"},{"mon":"hoa","diem":"8"}] }
Ở đây mình hay sử dụng cách thứ 2, chuyên qua dạng dynamic, khi đó muốn truy xuất dữ liệu như sonha, quan, hoặc điểm thi môn toán, lý hóa ta làm như sau:
using System.Web.Script.Serialization; JavaScriptSerializer jss = new JavaScriptSerializer(); var obj = jss.Deserialize<dynamic>(JsonText); Console.WriteLine(obj["hoten"]); //output -> Luong Cong Chien Console.WriteLine(obj["diachi"]["sonha"]); //output -> 123 Console.WriteLine(obj["diachi"]["quan"]); //output -> govap Console.WriteLine(obj["diemthi"][0]["mon"]); //output -> toan Console.WriteLine(obj["diemthi"][0]["diem"]); //output -> 10 Console.WriteLine(obj["diemthi"][1]["mon"]); //output -> ly Console.WriteLine(obj["diemthi"][1]["diem"]); //output -> 9
Ở đây tôi có thể sử dụng vòng lặp để truy xuất từng record trong mục diemthi:
for(int i=0; i<obj["diemthi"].Length;i++) { string mon = obj["diemthi"][i]["mon"]; string diem = obj["diemthi"][i]["diem"]; }
Nguồn: chiencong.com , vui lòng ghi rõ nguồn gốc của bài viết này