iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
1
Modern Web

ASP.NET MVC網頁程式介紹系列 第 20

[Day 20] C#中Json的序列化和反序列化的幾種方式(一)

什麼是JSON?

  • JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write and easy for machines to parse and generate. JSON is a text format that is completely language independent.

  • 翻譯:Json【javascript物件表示方法】,它是一個羽量級的資料交換格式,我們可以很簡單的來讀取和寫它,並且它很容易被電腦轉化和生成,它是完全獨立於語言的

Json有下面幾種表現形式

  • 對象
    一個沒有順序的“鍵/值”,一個物件以花括弧“{”開始,並以花括弧"}"結束,在每一個“鍵”的後面,有一個冒號,並且使用逗號來分隔多個鍵值對。例如:
    var user = {"name":"Manas","gender":"Male","birthday":"1987-8-8"}
  • 陣列
    設置值的順序,一個陣列以中括弧"["開始,並以中括弧"]"結束,並且所有的值使用逗號分隔,例如:
    var userlist = [{"user":{"name":"Manas","gender":"Male","birthday":"1987-8-8"}},
    {"user":{"name":"Mohapatra","Male":"Female","birthday":"1987-7-7"}}]
  • 字串
    任意數量的Unicode字元,使用引號做標記,並使用反斜杠來分隔。例如:
    var userlist = "{"ID":1,"Name":"Manas","Address":"India"}"

C#序列化和反序列化的第一種方式:使用JavaScriptSerializer類

首先要加入參考 System.Web.Extensions

using System.Web.Script.Serialization;

今天是用 主控台應用程式 做示範

首先宣告一個字定義的物件

Student stu = new Student()
{
    ID = 1,
    Name = "孔子",
    Age = 2000,
    Sex = "男"
};

序列化的方式

JavaScriptSerializer js = new JavaScriptSerializer();
string jsonData = js.Serialize(stu);//序列化
Console.WriteLine(jsonData);

反序列化的方式1

string desJson = jsonData;
Student model = js.Deserialize<Student>(desJson);// //反序列化
string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);

反序列化的方式2

string desJson = jsonData;
dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化
string messageDy = string.Format("動態的反序列化,ID={0},Name={1},Age={2},Sex={3}",
       modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//這裡要使用索引取值,不能使用物件.屬性

以下是完整的程式碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;

namespace ConsoleTest2
{
    class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student()
            {
                ID = 1,
                Name = "孔子",
                Age = 2000,
                Sex = "男"
            };

            JavaScriptSerializer js = new JavaScriptSerializer();
            string jsonData = js.Serialize(stu);//序列化
            Console.WriteLine(jsonData);

            ////反序列化方式一:
            string desJson = jsonData;
            //Student model = js.Deserialize<Student>(desJson);// //反序列化
            //string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);
            //Console.WriteLine(message);
            //Console.ReadKey(); 

            ////反序列化方式2
            dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化
            string messageDy = string.Format("動態的反序列化,ID={0},Name={1},Age={2},Sex={3}",
            modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//這裡要使用索引取值,不能使用物件.屬性
            Console.WriteLine(messageDy);
            Console.ReadKey();
        }
    }
}

執行畫面
https://ithelp.ithome.com.tw/upload/images/20171229/2010569494SMGBrZHC.jpg

參考資料
在C#中,Json的序列化和反序列化的幾種方式總結


上一篇
[Day 19] 使用C#連結MySql(MariaDB)資料庫(四)
下一篇
[Day 21] C#中Json的序列化和反序列化的幾種方式(二)
系列文
ASP.NET MVC網頁程式介紹30

尚未有邦友留言

立即登入留言