Serialize json là gì


Các ngôn ngữ lập trình phía Server như C#, Vb.Net, Java, PHP ngày nay đều có sẵn các thư viện hỗ trợ việc convert các dữ liệu dạng Object của các ngôn ngữ này sang JSON. Trong bài viết này chúng ta sẽ Sử dụng dữ liệu JSON trong C# với thư việnNewtonsoft, một trong những thư viện hỗ trợ JSON phổ biến nhất với các lập trình viên trên nền tảng Net Framework với hơn 100 triệu lượt tải.

Nhưng điểm khác là JSON là một phần của ngôn ngữ lập trình Javascript,Cú pháp để thao tác và truy vấntrong với Json được hỗ trợ sẵn trongJavascript.

Ví dụ : đối tượng Json lưu 1 danh sách cách sinh viên :

C#
var jsonObject = { "students" : [ { "name":"mit" , "age":"18" }, { "name":"beo" , "age":"20" } ]};
1
2
3
4
5
var jsonObject = { "students" :
[
{ "name":"mit" , "age":"18" },
{ "name":"beo" , "age":"20" }
]};

Truy vấn dữ liệu Javascript như sau : lấy tên và tuổi sinh viên thứ 2

C#
jsonObject.students[1].name + " " + jsonObject.students[1].age;
1
jsonObject.students[1].name + " " + jsonObject.students[1].age;

Với sự phát triển mạnh mẽ của các Frameworks như Jquery, json ngày càng được hỗ trợ tốt hơn và sử dụng rộng dãi hơn nhờ lưu trữ nhẹ và sự thao tác tiện dụng của mình. Thao tác JSon với Jquery bạn có thể sử dụng các hàm

C#
// Lấy dữ liệu từ HTTP trả vê định dạng Json jQuery.getJSON[] // Convert một chuỗi dạng Json tới đối tượng Json jQuery.parseJSON[ json ]
1
2
3
4
5
// Lấy dữ liệu từ HTTP trả vê định dạng Json
jQuery.getJSON[]
// Convert một chuỗi dạng Json tới đối tượng Json
jQuery.parseJSON[ json ]

Ngày nay với sự phát triển của các ứng web đặc biệt là từ khi có sự gia đời của Ajax, định dạng dữ liệu Json ngày càng trở lên hữu ích trong việc truyền dữ liệu giữ Client và Service. Các nhà phát triển phần mềmcó thể tạo racác Web services phía server trả vềdữ liệuđịnh dạngJsoncó kích thước nhỏ hơn theo các yêu cầu Ajax từ phía Client thay vì trả về cả trang như phương pháp cũ ngày xưa. Các ngôn ngữ lập trình phía Server hướng đối tượng như Java, C#, VB.net đều đã phát triển những lớp mới hoặc được phân tách thành các thư viên để hỗ trơ việc chuyển đổi thành các chuỗi Json để trả về phía Client.

Ngôn ngữ lập trình C# cũng không phải là một ngoại lệ, nó có rất nhiều cách để bạn có thể thao tác với định dạng dữ liệu JSON. Bạn có thể tự code các lớp của riêng mình, sử dụng các lớp có sẵn của Microsoft được cung cấp ở trong namespace System.Text.Json hoặc sử dungNewtonsoft.Json. Trong bài viết này sẽ đề cập tới thư việnNewtonsoft.Json, một thư viện mã nguồn mở khá phổ biến trong cộng động .Net hiện nay

Trong nền tảng .Net, thư việnNewtonsoft.Json là một thư viện mã nguồn mở tốt nhất để thao tác với JSON hiện nay và được tích hợp sẵn trong các Project phát triển Web của Microsoft. Nếu các bạn phát triển cần trao đổi dữ liệu dạng Json thìNewtonsoft.Json [Json.NET] là một sự lựa chọn không hề tồi.

+Json.NET là một thư viện mã nguồn mở có thể sử dụng miễn phí cho mục đích thươngmại [xem]

+Json.NET hỗ trợ trong các nền tảngWindows, Windows Store, Windows Phone, Mono, and Xamarin.

+Json.NET hỗ trợ convertgiữaXML vàJSON.

+Json.NET hỗ trợ World-class JSON Serializer, LINQ to JSON, XML Support, JSON Path

+ Và nhiều tính năng khác tại đây

Các bước để bạn có thể sử dụng một thư viện Newtonsoft JSON.NET

1. Tham chiếu thư việnNewtonsoft.Json

Các bạn có thể down về trực tiếp cả code và dll : tại đây.

Hoặc cài đặt Newtonsoft.Json qua Nuget cho project Visual Studio : tại đây.

Ở trong bài này chúng ta sử dụngInstall-Package Newtonsoft.Json -Version 12.0.3

Sau đó using Newtonsoft.Json; trong Project của bạn và sử dụng nó :

2. Serialize một đối tượng C# [Serialize an Object]

Giả sử ta có một class nhân viên:

C#
public class Employee { public string Name { get; set; } public int Age { get; set; } public bool IsBoss { get; set; } public double Salary { get; set; } }
1
2
3
4
5
6
7
8
9
10
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public bool IsBoss { get; set; }
public double Salary { get; set; }
}

Khởi tạo một đối tượng có kiểu Employee trong ngôn ngữ lập trìnhCSharp:

C#
// Khởi tạo một đối tượng var objEm = new Employee[] { Name = "hoctoantap.com", Age = 20, IsBoss = false, Salary = 1000.5 };
1
2
3
4
5
6
7
8
// Khởi tạo một đối tượng
var objEm = new Employee[]
{
Name = "hoctoantap.com",
Age = 20,
IsBoss = false,
Salary = 1000.5
};

Sử dụng phương thức SerializeObject của lớp JsonConvert để chuyển đối tượng objEm thành chuỗi JSON, phương thức này có nhiều đa hình, hỗ trợ bạn nhiều phương thức chuyển đổi khác nhau.

Ở ví dụ này ta sử dụng SerializeObject với đầu vào là một Object:

Kết quả nhận đượclà chuỗiJSON:

C#
{"Name":"hoctoantap.com","Age":20,"IsBoss":false,"Salary":1000.5}
1
{"Name":"hoctoantap.com","Age":20,"IsBoss":false,"Salary":1000.5}

3. Serialize mộtCollection như List, Array trongC# [Serialize an Collection]

Ví dụta có một List và Array trong C# như sau:

C#
// Khởi tạo một List List<string> jobList = new List<string>[] { "Accountant", "Actor", "Actress", "Architect", "Artist", "Assembler" }; // Khởi tạo một Array string[] jobList = new string[] { "Accountant", "Actor", "Actress", "Architect", "Artist", "Assembler" };
1
2
3
4
5
// Khởi tạo một List
List&lt;string&gt; jobList = new List&lt;string&gt;[] { "Accountant", "Actor", "Actress", "Architect", "Artist", "Assembler" };
// Khởi tạo một Array
string[] jobList = new string[] { "Accountant", "Actor", "Actress", "Architect", "Artist", "Assembler" };

Ta sử dụng phương thức SerializeObject của lớp JsonConvert để chuyểnListArraythành chuỗi JSON:

Kết quả nhận đượclà chuỗiJSON:

C#
["Accountant","Actor","Actress","Architect","Artist","Assembler"]
1
["Accountant","Actor","Actress","Architect","Artist","Assembler"]

4. Serialize một dữ liệu từ điển nhưDictionarytrongC# [Serialize ADictionary]

Ví dụta có một đối tương Dictionary về quốc giatrong C# như sau:

C#
Dictionary<int, string> nationDicts = new Dictionary<int, string> { { 1, "Viet Nam" }, { 2, "America" }, { 3, "China" } };
1
2
3
4
5
6
Dictionary&lt;int, string&gt; nationDicts = new Dictionary&lt;int, string&gt;
{
{ 1, "Viet Nam" },
{ 2, "America" },
{ 3, "China" }
};

Ta sử dụng phương thức SerializeObject của lớp JsonConvert để chuyểnDictionarythành chuỗi JSON:

Kết quả nhận đượclà chuỗiJSON:

C#
{"1":"Viet Nam","2":"America","3":"China"}
1
{"1":"Viet Nam","2":"America","3":"China"}

5. Serialize mộtdữ liệudạng bảngDataTabletrongC# [Serialize ADataTable]

Ví dụta có một đối tương DataTable về quốc giatrong C# như sau:

C#
// Khởi tạo một Dictionary DataTable table = new DataTable[]; //Định nghĩa column table.Columns.Add["ID", typeof[int]]; table.Columns.Add["Name", typeof[string]]; // Khởi tạo dữ liệu var row = table.NewRow[]; row["ID"] = 1; row["Name"] = "Viet Nam"; table.Rows.Add[row]; row = table.NewRow[]; row["ID"] = 2; row["Name"] = "America"; table.Rows.Add[row];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Khởi tạo một Dictionary
DataTable table = new DataTable[];
//Định nghĩa column
table.Columns.Add["ID", typeof[int]];
table.Columns.Add["Name", typeof[string]];
// Khởi tạo dữ liệu
var row = table.NewRow[];
row["ID"] = 1;
row["Name"] = "Viet Nam";
table.Rows.Add[row];
row = table.NewRow[];
row["ID"] = 2;
row["Name"] = "America";
table.Rows.Add[row];

Ta sử dụng phương thứcSerializeObjectcủa lớpJsonConvertđể chuyển DataTable thành chuỗi JSON:

Kết quả nhận đượclà chuỗiJSON:

C#
[{"ID":1,"Name":"Viet Nam"},{"ID":2,"Name":"America"}]
1
[{"ID":1,"Name":"Viet Nam"},{"ID":2,"Name":"America"}]

6. Serialize mộtdữ liệudạng bảngDataSet trongC# [Serialize A DataSet]

Ví dụta có một đối tươngDataSetvề quốc gia và nhân viên trong C# như sau:

C#
// Khởi tạo một DataSet DataSet dataset = new DataSet[]; // Khởi tạo một Datatable Quốc Gia DataTable nationTable = new DataTable[]; nationTable.TableName = "Nation"; //Định nghĩa column nationTable.Columns.Add["ID", typeof[int]]; nationTable.Columns.Add["Name", typeof[string]]; // Khởi tạo dữ liệu var row = nationTable.NewRow[]; row["ID"] = 1; row["Name"] = "Viet Nam"; nationTable.Rows.Add[row]; row = nationTable.NewRow[]; row["ID"] = 2; row["Name"] = "America"; nationTable.Rows.Add[row]; // Khởi tạo một Datatable nhân viên DataTable employeeTable = new DataTable[]; employeeTable.TableName = "Employee"; //Định nghĩa column employeeTable.Columns.Add["Code", typeof[string]]; employeeTable.Columns.Add["Name", typeof[string]]; // Khởi tạo dữ liệu var rowEm = employeeTable.NewRow[]; rowEm["Code"] = "NV001"; rowEm["Name"] = "Khanh Trang"; employeeTable.Rows.Add[rowEm]; rowEm = employeeTable.NewRow[]; rowEm["Code"] = "NV002"; rowEm["Name"] = "Le Van Luyen"; employeeTable.Rows.Add[rowEm];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Khởi tạo một DataSet
DataSet dataset = new DataSet[];
// Khởi tạo một Datatable Quốc Gia
DataTable nationTable = new DataTable[];
nationTable.TableName = "Nation";
//Định nghĩa column
nationTable.Columns.Add["ID", typeof[int]];
nationTable.Columns.Add["Name", typeof[string]];
// Khởi tạo dữ liệu
var row = nationTable.NewRow[];
row["ID"] = 1;
row["Name"] = "Viet Nam";
nationTable.Rows.Add[row];
row = nationTable.NewRow[];
row["ID"] = 2;
row["Name"] = "America";
nationTable.Rows.Add[row];
// Khởi tạo một Datatable nhân viên
DataTable employeeTable = new DataTable[];
employeeTable.TableName = "Employee";
//Định nghĩa column
employeeTable.Columns.Add["Code", typeof[string]];
employeeTable.Columns.Add["Name", typeof[string]];
// Khởi tạo dữ liệu
var rowEm = employeeTable.NewRow[];
rowEm["Code"] = "NV001";
rowEm["Name"] = "Khanh Trang";
employeeTable.Rows.Add[rowEm];
rowEm = employeeTable.NewRow[];
rowEm["Code"] = "NV002";
rowEm["Name"] = "Le Van Luyen";
employeeTable.Rows.Add[rowEm];

Ta sử dụng phương thứcSerializeObjectcủa lớpJsonConvertđể chuyểnDataSetthành chuỗi JSON:

Kết quả nhận đượclà chuỗiJSON:

C#
{"Nation":[{"ID":1,"Name":"Viet Nam"},{"ID":2,"Name":"America"}],"Employee":[{"Code":"NV001","Name":"Khanh Trang"},{"Code":"NV002","Name":"Le Van Luyen"}]}
1
{"Nation":[{"ID":1,"Name":"Viet Nam"},{"ID":2,"Name":"America"}],"Employee":[{"Code":"NV001","Name":"Khanh Trang"},{"Code":"NV002","Name":"Le Van Luyen"}]}

7. Serialize mộtdữ liệuhỗ hợp đối tượng và một danh sách các đối tượng con[Serialize An Object]

Ví dụta có một đối tươngManager kế thừa Employee ở mục 2 và quản lý 1 danh sách cácEmployeetrong C# như sau:

C#
public class Manager : Employee { public List<Employee> EmployeeList { get; set; } = new List<Employee>[]; } public class Employee { public string Name { get; set; } public int Age { get; set; } public bool IsBoss { get; set; } public double Salary { get; set; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Manager : Employee
{
public List&lt;Employee&gt; EmployeeList { get; set; } = new List&lt;Employee&gt;[];
}
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public bool IsBoss { get; set; }
public double Salary { get; set; }
}

Ta sử dụng phương thứcSerializeObjectcủa lớpJsonConvertthành chuỗiJSON:

C#
static string SerializeAnMixObject[] { // Khởi tạo một đối tượng var objBost = new Manager[] { Name = "tintoantap.com", Age = 40, IsBoss = true, Salary = 20000, EmployeeList = new List<Employee>[] { new Employee[]{ Name = "hoctoantap.com", Age = 35, IsBoss = false, Salary = 1000.5 }, new Employee[]{ Name = "carstoantap.com", Age = 30, IsBoss = false, Salary = 12345.67} } }; return JsonConvert.SerializeObject[objBost]; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static string SerializeAnMixObject[]
{
// Khởi tạo một đối tượng
var objBost = new Manager[]
{
Name = "tintoantap.com",
Age = 40,
IsBoss = true,
Salary = 20000,
EmployeeList = new List&lt;Employee&gt;[]
{
new Employee[]{
Name = "hoctoantap.com",
Age = 35,
IsBoss = false,
Salary = 1000.5
},
new Employee[]{
Name = "carstoantap.com",
Age = 30,
IsBoss = false,
Salary = 12345.67}
}
};
return JsonConvert.SerializeObject[objBost];
}

Kết quả nhận đượclà chuỗiJSON:

C#
{"EmployeeList":[{"Name":"hoctoantap.com","Age":35,"IsBoss":false,"Salary":1000.5},{"Name":"carstoantap.com","Age":30,"IsBoss":false,"Salary":12345.67}], "Name":"tintoantap.com","Age":40,"IsBoss":true,"Salary":20000.0}
1
2
{"EmployeeList":[{"Name":"hoctoantap.com","Age":35,"IsBoss":false,"Salary":1000.5},{"Name":"carstoantap.com","Age":30,"IsBoss":false,"Salary":12345.67}],
"Name":"tintoantap.com","Age":40,"IsBoss":true,"Salary":20000.0}

8. Định dạng chuỗi JSON

Đối với các chuỗi JSON nhận về nhiều dữ liệu và có định dạng phức tạp, khi dùngSerializeObjectcủa lớpJsonConvert mà không định dạng dữ liệu ta sẽ nhận được dữliềnnhau trên một dòng rất khó đọc như ở mục 6 và mục 7 ở phía trên.Tham số Formatting.Indented, đầu vào của mộtphương thứcđa hình khác của SerializeObject sẽ cho phép bạn định dạng chuỗi JSON trả ra trở lên dễ nhìn hơn. Vẫn như mục 7, nhưng ở ví dụ này ta thêmtham số Formatting để định dạng dữ liệu:

C#
JsonConvert.SerializeObject[objBost, Formatting.Indented];
1
JsonConvert.SerializeObject[objBost, Formatting.Indented];

Kết quả nhận đượclà chuỗiJSON:

C#
{ "EmployeeList": [ { "Name": "hoctoantap.com", "Age": 35, "IsBoss": false, "Salary": 1000.5 }, { "Name": "carstoantap.com", "Age": 30, "IsBoss": false, "Salary": 12345.67 } ], "Name": "tintoantap.com", "Age": 40, "IsBoss": true, "Salary": 20000.0 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"EmployeeList": [
{
"Name": "hoctoantap.com",
"Age": 35,
"IsBoss": false,
"Salary": 1000.5
},
{
"Name": "carstoantap.com",
"Age": 30,
"IsBoss": false,
"Salary": 12345.67
}
],
"Name": "tintoantap.com",
"Age": 40,
"IsBoss": true,
"Salary": 20000.0
}

9. Deserialize một đối tượng C# [Deserialize an Object]

Để chuyển một đối tượng C# thành chuỗi JSON ta sử dụng phương thức SerializeObject. Ngược lại để chuyển một chuỗi JSON thành một đối tượng trong C# ta sử dụng hàmDeserializeObject. Ví dụ ta có chuỗi JSON nhận được như ở mục 7:

C#
{"EmployeeList":[{"Name":"hoctoantap.com","Age":35,"IsBoss":false,"Salary":1000.5},{"Name":"carstoantap.com","Age":30,"IsBoss":false,"Salary":12345.67}], "Name":"tintoantap.com","Age":40,"IsBoss":true,"Salary":20000.0}
1
2
{"EmployeeList":[{"Name":"hoctoantap.com","Age":35,"IsBoss":false,"Salary":1000.5},{"Name":"carstoantap.com","Age":30,"IsBoss":false,"Salary":12345.67}],
"Name":"tintoantap.com","Age":40,"IsBoss":true,"Salary":20000.0}

Ta thực hiện chuyển lại thành đối tượng Manager như sau:

C#
// Phương thức Deserialize an Object static Manager DeserializeAnObject[] { // Chuỗi JSON ở mục 7 string jsonString = SerializeAnMixObject[]; return JsonConvert.DeserializeObject<Manager>[jsonString]; }
1
2
3
4
5
6
7
8
// Phương thức Deserialize an Object
static Manager DeserializeAnObject[]
{
// Chuỗi JSON ở mục 7
string jsonString = SerializeAnMixObject[];
return JsonConvert.DeserializeObject&lt;Manager&gt;[jsonString];
}

Khi ép kiểu với JsonConvert.DeserializeObject ta nhận đượckết quả:

Hãy tham khảo thêm hàng trăm ví dụ về Json.NET : tại đây.

Tải code Sample: Tại đây

Trở về

Mít&Mít


Related Post

Giới thiệu về JSON
Sử dụng file JSON trực tiếp trong HTML với sự hỗ t...
Tạo file dữ liệu JSON trong C# với thư viện Newton...

Phản hồi

Phản hồi

Related posts:

  1. Tạo file dữ liệu JSON trong C# với thư viện Newtonsoft

Video liên quan

Chủ Đề