Friday , 19 April 2024
HOT

Chuyển đổi JSON Text qua đối tượng trong C#

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

Leave a Reply

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

*