C#序列化和反序列化 之 dynamic 動態Json的反序列化
阿新 • • 發佈:2020-10-26
序列化和反序列化的常識不再贅述,如果不清楚這個,可以 參考一下其他人寫的文章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
上述程式碼是完全可行的。