1. 程式人生 > 實用技巧 >C#序列化和反序列化 之 dynamic 動態Json的反序列化

C#序列化和反序列化 之 dynamic 動態Json的反序列化

序列化和反序列化的常識不再贅述,如果不清楚這個,可以 參考一下其他人寫的文章https://www.cnblogs.com/maitian-lf/p/3670570.html

總結的說,

序列化 是把記憶體物件 轉變成 二進位制流/xml/json 等格式,儲存起來或者用來傳輸

反序列化 是把 二進位制流/xml/json 等的內容,轉變回 記憶體物件。

以JSON為列,大多數的反序列化程式碼類似這樣




    class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }


        public void Test()
        {
            string studentJson = JsonConvert.SerializeObject(this);

            JsonConvert.DeserializeObject<Student>(studentJson);
        }
    }

  當你執行反序列化的時候,你必須定義一個Json格式對應的類。

{"Id":1,"Name":"csszbb"} 對應與Student  ,大多數人的程式碼如上,會取定義一個Student類。

那麼問題來了,如果 JSON 串的格式是動態的那?
第一次可能是{"Id":1,"Name":"csszbb"}
第二次可能是{"Id":1,"Name":"csszbb","Weight":120}

第三次。第四次。欄位有可能發生變化。如果不改Student類的定義,上述程式碼是會報錯的。那我們怎麼辦?

在JAVAScript種,物件是動態型別的,任何型別的json串,都可以Json.payse(xxx) 轉化成 JSP的物件。非常方便.因為jsp的物件是支援動態新增屬性的。不需要像C#那樣,預先定義一個類

那麼C#種有沒有類似的東西那 ?答案是有的 dynimic 關鍵字 基礎常識學習可以看下這篇文章
https://www.cnblogs.com/gygtech/p/9915367.html

上述程式碼是完全可行的。