JSON in .Net

Bài viết hướng dẫn chuyển đổi(convert) một chuỗi(string) định dạng JSON sang đối tượng (object) của .Net và ngược lại, sử dụng JavaScriptSerializer trong thư viện System.Web.Extensions.

Chúng ta đều biết đối tượng kiểu JSON cực kỳ thuận tiện trong tương tác javascript.
Nhưng khi tương tác với server thông qua Ajax, nó có một hạn chế. Ta ko thể truy xuất sâu hơn các thuộc tính trực tiếp của đối tượng.

Chẳng hạn, ta có đối tượng JSON như sau:

var person = {
     name    : "svincoll",
     address : {
          street : "Le Lai"
          city   : "hcm"
     }
 }

 

sau đó, ta dùng ajax đưa dữ liệu này về server thông qua POST.

 

$.post("jsonDemo.aspx", person);

Hãy xem, ta lấy được gì ở server nhé:



Như vậy, với thuộc tính name ta lấy được giá trị, còn address thì không.
Bởi vì giá trị của address là đối tượng JSON, và browser đã sử dụng hàm toString() trong trường hợp này.

Có lẽ vì điều đó mà bạn nên đọc bài viết này bigsmile

1. Javascript Serialize

Trong Ajax Extensions, có hỗ trợ cho chúng ta một lớp đối tượng JavaScriptSerializer, lớp đối tượng này cho phép ta chuyển đổi một đối tượng C# thành một chuỗi theo định dạng JSON và ngược lại.

Để minh họa điều này, ta sẽ xây dựng hai đối tượng PersonPersonAddress như sau:


Tiếp theo, ta sẽ khởi tạo đối tượng Person, và serialize nó thành chuỗi JSON:



kiểm tra giá trị của biến json, ta được chuỗi JSON như sau:

 

{"Name":"svincoll","Address":{"Street":"Le Lai","City":"hcm"}}

Với chuỗi JSON trên, ta hoàn toàn có thể deserialize để nhận về đối tượng Person ban đầu



Tới đây, việc xử lý dữ liệu phía codebehind (code server) đã xong. Vấn đề mấu chốt là chúng ta cần 1 chuỗi JSON, để từ đó convert qua object.

2. Ajax

Từ browser, chúng ta cần gửi đi một chuỗi JSON, ko phải đối tượng JSON, để server nhận được và chuyển đổi thành object tương ứng.

Việc này không quá khó. Chúng ta có thể viết một hàm riêng, chuyển đổi đối tượng JSON thành chuỗi, hoặc sử dụng các thư viện có sẵn như jQuery JSON

Nguồn: http://my.opera.com/svincoll4/blog/2009/10/18/json-in-net