Giới Thiệu Và Hướng Dẫn Sử Dụng JSON Trong .NET | Kien's Space
Thời gian qua phải tự làm một project theo nhu cầu của bản thân mà cần thao tác với dữ liệu JSON nên cũng tự tìm hiểu một chút về định chuẩn dữ liệu này. Mình viết tut này nhằm tổng hợp lại những gì đã tìm hiểu, rất mong mọi người góp ý, bổ sung.
I. JSON là gì?
Json (viết tắt của JavaScript Object Notation) là một định dạng text có cấu trúc (như XML), được sử dụng để trao đổi dữ liệu.
Ví dụ về chuỗi Json:
{“success”:”TRUE”,”error”:”0″,”message”:”Load dữ liệu thành công”,”header”:{“totalrecords”:”549″,”numberrecords”:”2″},”object”:[{“projectid”:”1772″,”projectname”:”Trung Kính Complex”,”projectnamelink”:”trung-kinh-complex”,”lead”:”Trung Kính Complex có tổng diện tích 1.732 ha, tại Tổ 51, phường Yên Hòa, quận Cầu Giấy, Hà Nội, do Công ty CP đầu tư Văn Phú – Invest làm chủ đầu tư.”,”imagelink”:”http://vckm.landtoday.net/library/images/2011/09/4674_trung-kinh1.jpg ” },{“projectid”:”1861″,”projectname”:”Hado Park View”,”projectnamelink”:”hado-park-view”,”lead”:”Hado Park View có tổng diện tích 5265m2, tại Lô đất N10 KĐTM Dịch Vọng, Cầu Giấy, Hà Nội, do Tập đoàn Hà Đô làm chủ đầu tư.”,”imagelink”:”http://vckm.landtoday.net/library/images/2012/02/4789_hadopark1.jpg ” }]}
hay như thế này
{ “success”:”TRUE”, “error”:”0″, “message”:”Load dữ liệu thành công”, “header”: { “totalrecords”:”549″, “numberrecords”:”2″ }, “object”:[ { “projectid”:”1772″, “projectname”:”Trung Kính Complex”, “projectnamelink”:”trung-kinh-complex”, “lead”:”Trung Kính Complex có tổng diện tích 1.732 ha, tại Tổ 51, phường Yên Hòa, quận Cầu Giấy, Hà Nội, do Công ty CP đầu tư Văn Phú – Invest làm chủ đầu tư.”, “imagelink”:”http://vckm.landtoday.net/library/images/2011/09/4674_trung-kinh1.jpg ” }, { “projectid”:”1861″, “projectname”:”Hado Park View”, “projectnamelink”:”hado-park-view”, “lead”:”Hado Park View có tổng diện tích 5265m2, tại Lô đất N10 KĐTM Dịch Vọng, Cầu Giấy, Hà Nội, do Tập đoàn Hà Đô làm chủ đầu tư.”, “imagelink”:”http://vckm.landtoday.net/library/images/2012/02/4789_hadopark1.jpg ” } ] }
Khai báo string trong C#:
string json = “{\”success\”:\”TRUE\”,\”error\”:\”0\”,\”message\”:\”Load dữ liệu thành công\”,\”header\”:{\”totalrecords\”:\”549\”,\”numberrecords\”:\”2\”},\”object\”:[{\”projectid\”:\”1772\”,\”projectname\”:\”Trung Kính Complex\”,\”projectnamelink\”:\”trung-kinh-complex\”,\”lead\”:\”Trung Kính Complex có tổng diện tích 1.732 ha, tại Tổ 51, phường Yên Hòa, quận Cầu Giấy, Hà Nội, do Công ty CP đầu tư Văn Phú – Invest làm chủ đầu tư.\”,\”imagelink\”:\http://vckm.landtoday.net/library/images/2011/09/4674_trung-kinh1.jpg \” },{\”projectid\”:\”1861\”,\”projectname\”:\”Hado Park View\”,\”projectnamelink\”:\”hado-park-view\”,\”lead\”:\”Hado Park View có tổng diện tích 5265m2, tại Lô đất N10 KĐTM Dịch Vọng, Cầu Giấy, Hà Nội, do Tập đoàn Hà Đô làm chủ đầu tư.\”,\”imagelink\”:\http://vckm.landtoday.net/library/images/2012/02/4789_hadopark1.jpg \” }]}” ;
Mình chưa tìm được cách làm cho chuỗi trên dễ nhìn hơn. 🙂
Đây là dữ liệu được lấy từ landtoday.net, vì mình cần lấy nó cho công việc hàng ngày nên phải viết code, vì vậy nên lấy luôn làm ví dụ.
Từ đây bạn thấy Json sử dụng cặp dấu “{}” để bao các bản ghi, dùng dấu “,” để phân cách các cặp thuộc tính, giá trị, dùng dấu “:” để phân biệt thuộc tính và giá trị, và dùng cặp dấu “[ ]” cho mảng các bản ghi.
Mình sẽ không đi sâu vào json, để tìm hiểu, bạn có thể đọc nó tại wikipedia hay chính tại trang chủ: http://www.json.org/
II. Sử dụng Json trong .NET
Từ .Net 3.5, bạn có thể sử dụng namespace System.Runtime.Serialization.Json để làm việc với json, mình mới tìm hiểu về lớp DataContractJsonSerializer thôi, nên mình sẽ sử dụng lớp này.
Trước hết bạn cần tạo ra một lớp tương ứng với chuỗi Json cần làm việc.
Ví dụ với chuỗi json ở ví dụ trên, ta có các lớp tương ứng như sau:
[DataContract] public class Header { [DataMember] public string totalrecords { get; set; } [DataMember] public string numberrecords { get; set; } } [DataContract] public class JsObject { [DataMember] public string projectid { get; set; } [DataMember] public string projectname { get; set; } [DataMember] public string projectnamelink { get; set; } [DataMember] public string lead { get; set; } [DataMember] public string imagelink { get; set; } } [DataContract] public class RootObject { [DataMember] public string success { get; set; } [DataMember] public string error { get; set; } [DataMember] public string message { get; set; } [DataMember] public Header header { get; set; } [DataMember] public List<JsObject> @object { get; set; } } Để tạo ra các lớp trên có khá nhiều công cụ sinh khai báo lớp từ chuỗi json, ở đây mình xin giới thiệu trang web:
http://json2csharp.com/
Việc sử dụng công cụ này các bạn tự tìm hiểu, mình chỉ lưu ý là các lớp sinh ra không có attribute [DataContract] nên các bạn phải tự thêm vào. Các lớp trên mình cũng sử dụng trang web http://json2csharp.com/ để tạo. 1. Chuyển đổi từ chuỗi json sang đối tượng .NET
Các bạn sử dụng phương thức non static ReadObject(Stream) của lớp DataContractJsonSerializer để làm việc này. Ví dụ:
//Lấy chuỗi json và lớp RootObject ở trên MemoryStream stream1 = new MemoryStream(Encoding.UTF8.GetBytes(json)); stream1.Position = 0; System.Runtime.Serialization.Json.DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(Utility.RootObject)); RootObject jsonRoot = (RootObject)ser.ReadObject(stream1); Vậy là bạn có đối tượng jsonRoot để sử dụng.
2. Chuyển đổi từ đối tượng .NET sang chuỗi json
Các bạn sử dụng phương thức non static WriteObject(Stream, object) của lớp DataContractJsonSerializer để làm việc này.
Ví dụ:
//Lấy đối tượng jsonRoot vừa tạo ở trên DataContractJsonSerializer ser2 = new DataContractJsonSerializer(jsonRoot.GetType()); MemoryStream stream2 = new MemoryStream(); ser2.WriteObject(stream2, jsonRoot); StreamReader reader = new StreamReader(stream2); string t = reader.ReadToEnd();
Chú ý: chuỗi được tạo ra có thể không giống chuỗi ban đầu (Mình chưa biết tại sao?) dẫn đến đối tượng sinh ra từ chuỗi này khác đối tượng ban đầu, tuy nhiên mình debug thấy không khác nhau (nhưng so sánh lại khác nhau?) có thể do Escape, nếu ai có cách khắc phục vui lòng chia sẻ, ngoài cách thao tác trên có một số cách khác như sử dụng lớp System.Web.Script.Serialization.JavaScriptSerializer.
Trên đây là những gì mình tìm hiểu được, còn nhiều thiếu sót do mình chưa tìm hiểu sâu, mong mọi người góp ý
Tham khảo: MSDN (tất nhiên) Json.org Wikipedia Stackoverflow
Từ khóa » đọc Json Trong C#
-
Xử Lý Json Trong C# – Norid's Blog
-
Sử Dụng Dữ Liệu JSON Trong C# Với Thư Viện Newtonsoft
-
Parse JSON Bằng C# - Phan Tiến Quang
-
Đọc Và Ghi File JSON Sử Dụng JsonConvert Trong C#
-
Chuyển đổi JSON Text Qua đối Tượng Trong C# | CongChien Blog
-
[VB.NET] Hướng Dẫn Cách đọc Dữ Liệu Json Trên Winform Một Cách ...
-
Sử Dụng .NET để Xác Thực JSON Bằng Lược đồ JSON - Comdy
-
Bài 52: Tạo định Dạng JSON Trong C# Service Vs Android
-
Tạo File Dữ Liệu JSON Trong C# Với Thư Viện Newtonsoft
-
Read And Process JSON File With C# - Microsoft Q&A
-
[VB.NET] Hướng Dẫn đọc Chuỗi Dữ Liệu JSON Vào Winform đơn Giản ...
-
Chương Trình Quản Lý Sinh Viên C# + Import/Export JSON + File