C#序列化和反序列化(json)
一,什麼是Json?
json是存儲和交換文本信息的方法,類似xml。但是json比xml更小,更快,j更易於解析。並且json採用完全獨立於語言的文本格式(即不依賴於各種編程語言),這些特性使json成為理想的數據交換語言。
json使用JavaScript語法來描述數據對象,但是json獨立於語言和平台。json解析器和json庫支持許多不同的編程語言。
json語法規則:
- 數據在鍵值對中
- 數據由逗號分割
- 花括號保存對象
- 方括號保存數組
json數據結構:
json簡單來說就是javascript中的對象和數組,通過這兩種數據結構就可以表示各種複雜的結構。
- 對象:對象在json中表示為大括號「{}」括起來的內容,數據結構為{key:value,key:value,…}的鍵值對的結構。在面向對象中,key為對象的屬性,vlaue為對應屬性的值。取值方法為對象.key(c#對象[key])獲取屬性值,這個屬性值可以為數字,字符串,數組,對象幾種。
- 數組:數組在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); }