C#序列化和反序列化(json)

唯有自己強大發表於2022-03-19

一,什麼是Json?

json是儲存和交換文字資訊的方法,類似xml。但是json比xml更小,更快,j更易於解析。並且json採用完全獨立於語言的文字格式(即不依賴於各種程式語言),這些特性使json成為理想的資料交換語言。

json使用JavaScript語法來描述資料物件,但是json獨立於語言和平臺。json解析器和json庫支援許多不同的程式語言。

json語法規則:

  • 資料在鍵值對中
  • 資料由逗號分割
  • 花括號儲存物件
  • 方括號儲存陣列

json資料結構:

json簡單來說就是javascript中的物件和陣列,通過這兩種資料結構就可以表示各種複雜的結構。

  1. 物件:物件在json中表示為大括號“{}”括起來的內容,資料結構為{key:value,key:value,...}的鍵值對的結構。在物件導向中,key為物件的屬性,vlaue為對應屬性的值。取值方法為物件.key(c#物件[key])獲取屬性值,這個屬性值可以為數字,字串,陣列,物件幾種。
  2. 陣列:陣列在json中表示為中括號“[]”括起來的內容,資料結構為["java","javascript","vb",...],取值方式和所以語言一樣,使用索引獲取,欄位的值可以是數字,字串,陣列,物件幾種。

安裝JsonNet程式包:

右鍵單擊專案->選擇管理NuGet程式包->輸入json->選擇Newtonsoft.Json進行下載。

 下載完成後就會出現:

二, json的序列化和反序列化

 我們可以新增一個文字檔案新建專案,在這裡就可以安裝json的語法進行書寫。

 並建立一個skill類用於接收該值。(類中的屬性要與josn鍵值對應)

    class skill
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int damage { get; set; }

    }

1️⃣反序列化(即將json語法轉化成C#中的物件)

在主程式中進行呼叫:(引用新增的txt路徑需要將skill.txt的複製到輸出目錄屬性設定為如果較新則複製)

        static void Main(string[] args)
        {
            //反序列化DeserializeObject
            skill[] skillArray= JsonConvert.DeserializeObject<skill[]>(File.ReadAllText("skill.txt"));
            foreach (skill s in skillArray)
            {
                Console.WriteLine("id:" + s.ID + "名字:" + s.Name + "傷害值:" + s.damage);
            }
        }

 這樣就完成了反序列化操作:

 2️⃣序列化操作(將C#中類的資料轉換成json格式)

  • 序列化物件(josn格式:使用大括號)
        static void Main(string[] args)
        {
            //SerializeObject
            skill sk = new skill();
            sk.ID = 10;
            sk.Name = "金剛罩";
            sk.damage = 1000;
            string str = JsonConvert.SerializeObject(sk);
            Console.WriteLine(str);
        }

 獲得的字串str可以用來傳輸或儲存。

  •  序列化陣列(json格式:使用中括號)
        static void Main(string[] args)
        {
            string[] ss = { "小李", "小王", "小紅" };
            string str = JsonConvert.SerializeObject(ss);
            Console.WriteLine(str);
        }

相關文章