C#處理JSON - 學習筆記
阿新 • • 發佈:2020-10-24
視訊連結:https://www.bilibili.com/video/BV1Yt41127rC
教程使用兩種庫對JSON檔案進行序列化和反序列化。
1、JavaScriptSerializer
在專案中新增引用:System.Web.Extension
然後使用 using 語句匯入名稱空間:System.Web.Script.Serialization
示例1,讀:從json檔案中反序列化資料
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text;using System.Threading.Tasks; using System.Web.Script.Serialization; namespace json_read { class Person { public string name { get; set; } public int age { get; set; } public override string ToString() { return string.Format("Name: {0} \nAge: {1}",name,age); } }class Program { static void Main(string[] args) { String jsonString = File.ReadAllText("json.json"); JavaScriptSerializer serializer = new JavaScriptSerializer(); Person p1 = serializer.Deserialize<Person>(jsonString); Console.WriteLine(p1); Console.ReadKey(); } } }
示例2,寫:序列化資料寫入json檔案
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; namespace json_write { class Person { public string name { get; set; } public int age { get; set; } public override string ToString() { return string.Format("Name: {0} \nAge: {1}",name,age); } } class Program { static void Main(string[] args) { JavaScriptSerializer serializer = new JavaScriptSerializer(); Person person = new Person { name = "Ben", age = 58 }; string jsonOutput = serializer.Serialize(person); File.WriteAllText("Output.json",jsonOutput); Console.ReadKey(); } } }
2、JSON.NET
使用 Nuget 安裝 Newtonsoft.Json,教程中安裝的是 Json.NET(可能現在更新了吧)
然後使用 using 語句匯入名稱空間:Newtonsoft.Json
示例1,讀:從json檔案中反序列化資料
using System;
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json; namespace json_read { class Person { public string name { get; set; } public int age { get; set; } public override string ToString() { return string.Format("Name: {0} \nAge: {1}", name, age); } } class Program { static void Main(string[] args) { String jsonString = File.ReadAllText("json.json"); Person p1 = JsonConvert.DeserializeObject<Person>(jsonString); Console.WriteLine(p1); Console.ReadKey(); } } }
示例2,寫:序列化資料寫入json檔案
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json; namespace json_write { class Person { public string name { get; set; } public int age { get; set; } public override string ToString() { return string.Format("Name: {0} \nAge: {1}", name, age); } } class Program { static void Main(string[] args) { Person person = new Person { name = "Ben", age = 58 }; string jsonOutput = JsonConvert.SerializeObject(person); File.WriteAllText("Output.json", jsonOutput); Console.ReadKey(); } } }
綜合應用示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json; using System.Net.Http.Headers; namespace 綜合應用 { class Item : IEquatable<Item> { public string name; public int price; public Item(string name, int price = 0) { this.name = name; this.price = price; } public bool Equals(Item other) { if (other == null) return false; return (this.name.Equals(other.name)); } } class Program { static void Main(string[] args) { Console.WriteLine("Reading data.json"); string jsonString = File.ReadAllText("data.json"); List<Item> myList = JsonConvert.DeserializeObject<List<Item>>(jsonString); if (myList == null) myList = new List<Item>(); string input = ""; int inputInt = 0; string inputString = ""; while (input != "q") { Console.WriteLine("Press 'a' to Add new Item"); Console.WriteLine("Press 'd' to Delete Item"); Console.WriteLine("Press 's' to Show Content"); Console.WriteLine("Press 'q' to Quit Program"); Console.WriteLine("Press Command"); input = Console.ReadLine(); switch(input) { case "a": Console.WriteLine("Adding a new item"); Console.WriteLine("Enter item name"); inputString = Console.ReadLine(); Console.WriteLine("Enter item price (Numeric Values Only)"); inputInt = Convert.ToInt32(Console.ReadLine()); myList.Add(new Item(inputString, inputInt)); Console.WriteLine("Added item " + inputString + "with price " + inputInt); break; case "d": Console.WriteLine("Deleting item"); Console.WriteLine("Enter item name to delete:"); inputString = Console.ReadLine(); myList.Remove(new Item(inputString)); Console.WriteLine("Deleted item with name" + inputString); break; case "q": Console.WriteLine("Quit Program"); break; case "s": Console.WriteLine("\nShowing Contents:"); foreach (Item item in myList) { Console.WriteLine("Item: "+ item.name + " | $" + item.price); } Console.WriteLine("\n"); break; default: Console.WriteLine("Incorrect command, try again"); break; } } Console.WriteLine("Rewriting data.json"); string data = JsonConvert.SerializeObject(myList); File.WriteAllText("data.json", data); Console.ReadKey(); } } }