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