Parse JSON bằng C#

Trong web, bạn có thể chuyển đổi file JSON qua object rất nhanh chóng bằng javascript. Vậy còn trong windows form, cách chuyển đổi sẽ như thế nào? Đó là nội dung của bài viết này.

JSON là gì? JSON có dùng để làm gì? JSON có lợi ích như thế nào?... Mọi câu hỏi các bạn có thể tham khảo tại đây. Rất đầy đủ và dễ hiểu nên mình không nhắc lại nữa.

Giao diện

Mình tạo 1 ứng dụng windows form với giao diện như sau

Tạo file JSON

Đơn giản là bạn chỉ cần viết nội dung file json vào notepad và lưu với phần mở rộng là *.json. Nội dung file json của mình như sau:

Code

Để đơn giản, mình tạo 1 lớp Employee để lưu thông tin 1 Employee như sau
Sự kiện click của button Parse được viết như sau (chú ý những dòng in đậm)
  • Dòng 7: Đầu tiên là đọc nội dung file json, file này được đặt trong cùng thư mục với file .exe. Cần phải using namespace System.IO; để sử dụng StreamReader.
  • Dòng 11: Tạo 1 đối tượng JavaScriptSerializer để thực hiện việc chuyển đổi file json. add reference System.Web.Extensions
  • Dòng 15: Chuyển đổi nội dung của chuỗi (string) json thành một đối tượng dynamic (dynamic là 1 từ khóa, không phải là 1 kiểu dữ liệu, cũng giống như từ khóa var). Tham khảo dynamic tại đây *trollface*.
  • Bắt đầu từ dòng 18, sau khi chuyển đổi file json, obj được coi như 1 mảng và ta lấy dữ liệu như 1 mảng bình thường. Ở đây mình sẽ lấy ra mỗi Employee và thêm vào 1 danh sách, sau đó mới đưa danh sách này lên RichTextbox. Làm như vậy để các bạn biết được cách lấy 1 object từ 1 đối tượng dynamic thôi, bởi vì tới dòng 21 các bạn có thể thêm ngay vào RichTextbox cũng được.

Kết quả

Chú ý
  • Cần file bẫy lỗi trong quá trình đọc file
  • Cần xét các trường hợp obj null hoặc đọc không có field đó. VD obj["employees"][i]["address"] sẽ báo lỗi.
  • Cuối cùng, dynamic là 1 thằng vừa-dễ-vừa-khó sử dụng, cho nên phải cẩn thận khi dùng kiểu dynamic

Source code

Update later

Trên đây là cách parse json đơn giản bằng c#, hiện nay, thao tác với json đã có thư viện newtonsoft json rất hiệu quả, bạn có thể tham khảo bằng link dưới

Comments

  1. Replies
    1. Sao không download được source code vậy

      Delete
    2. Cái này đơn giản mà, hoàn toàn có thể tự viết được :v
      Source code mình quên chưa upload =))

      Delete
    3. mình đang tìm hiểu nên gà mờ quá. có thể post cho mình tham khảo được k?

      Delete
    4. Mà cho mình hỏi, mình muốn lấy dữ liệu từ rest service xuống data thì làm thế nào :3

      Delete
    5. Đơn giản thôi, tìm hiểu bài này nhé http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC-and-WebAP

      hoặc dựa vào đoạn code mẫu sau

      public HttpClient client = new HttpClient();

      public WebApiClient()
      {
      client.BaseAddress = new Uri("http://localhost:62387/");
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
      }

      public List GetAll(String requestUrl)
      {
      var response = client.GetAsync(requestUrl).Result;
      if (response.IsSuccessStatusCode)
      {
      var students = response.Content.ReadAsAsync>().Result;
      return students;
      }
      return null;
      }

      Delete
    6. Cảm ơn bạn.. Cho mình hỏi rtbResult là cái gì
      AppendText thì cần add thư viện gì.

      Delete
    7. rtbResult là cái richtextbox hiển thị ra đó. AppendText là phương thức của cái control đó thôi, không cần thư viện nào nữa.

      Delete
  2. bài này bạn viết rất hay viết code rất khoa học. Nhưng viết sai vài chỗ chắc bạn viết chay chưa debug

    ReplyDelete
    Replies
    1. hehe, thanks bác đã góp ý. Mình sẽ xem lại và update chỗ sai ^^.

      Delete
  3. bạn giải thích giúp mình line 19 với, mình không hiểu &lt là gi vậy ?

    ReplyDelete
    Replies
    1. hi My, chỗ đó là 1 vòng for bình thường (lỗi hiển thị thôi)

      for (int i = 0; i < len; i++) { ... }

      Delete

Post a Comment

Popular posts from this blog

Thay đổi quyền ownership trong Windows

Gỡ bộ Visual Studio ra khỏi máy tính