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

一,什麼是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);
        }

Tags: