NuGet中添加最新穩定版:
Newtonsoft.Json
新建類:
using System; namespace SystemClass.JsonStudy { class Person { public int ID { get; set; } public string Name { get; set; } public DateTime Birthday { get; set; } public bool IsVIP { get; set; } public float Account { get; set; } public string[] Favorites { get; set; } public string Remark { get; set; } public static Person GetPerson() { Person person = new Person { ID = 1, Name = "張三", Birthday = DateTime.Now, IsVIP = true, Account = 12.34f, Favorites = new string[] { "起床", "上班" } }; return person; } } }
使用:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; namespace SystemClass.JsonStudy { class Program { static void Main(string[] args) { //0 創建一個 Person 實例 Person entity = Person.GetPerson(); string jsonStr = string.Empty; //1 實體類的 Json 序列化和反序列化 // 1.1 Json 序列化 // 1.1.1返回不縮進的 Json 字符串【見圖01】 jsonStr = JsonConvert.SerializeObject(entity); // 1.1.2返回縮進的 Json 字符串【見圖02】 jsonStr = JsonConvert.SerializeObject(entity, Formatting.Indented); // 1.2 將不縮進的 JSON 字符串轉成縮進形式【見圖03】 jsonStr = JsonConvert.SerializeObject(entity); JObject jObject = JObject.Parse(jsonStr); jObject.ToString(); // 1.3 其他設置【見圖04】 JsonSerializerSettings settings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss",//設置日期格式 NullValueHandling = NullValueHandling.Ignore,//忽略【null】值 Formatting = Formatting.Indented//縮進 }; jsonStr = JsonConvert.SerializeObject(entity, settings); // 1.4 Json 反序列化【在不知道類的情況下,可以直接將json字符串轉為JObject】 var person = JsonConvert.DeserializeObject<Person>(jsonStr); //2 JObject 使用 // 2.1 創建對象 JObject obj = new JObject(); obj.Add("ID", 1); obj.Add("Name", "張三"); obj.Add("Birthday", DateTime.Parse("2000-01-02")); obj.Add("IsVIP", true); obj.Add("Account", 12.34f); // 創建數組 JArray array = new JArray(); array.Add(new JValue("吃飯")); array.Add(new JValue("睡覺")); obj.Add("Favorites", array); obj.Add("Remark", null); // 2.1.1 遍歷 JObject 對象 foreach (JProperty item in obj.Children()) { Console.WriteLine("Name=" + item.Name + "-Value=" + item.Value); } // 2.2 JObject 中添加數組 // 上例中的代碼可以簡化為: JArray array1 = new JArray("吃飯", "睡覺"); // 2.3 從 Json 字符串創建 JObject string json = "{\"ID\":1,\"Name\":\"張三\",\"Birthday\":\"2000-01-02T00:00:00\",\"IsVIP\":true,\"Account\":12.34,\"Favorites\":[\"吃飯\",\"睡覺\"],\"Remark\":null}"; JObject obj1 = JObject.Parse(json); Console.WriteLine(obj1.ToString()); Console.WriteLine(AddStr(json, "add", "add")); // 2.4 從 Entity 創建 JObject JObject obj2 = JObject.FromObject(entity); // 2.5 用匿名對象創建 JObject JObject obj3 = JObject.FromObject(new { name = "jack", age = 18 }); /*顯示 { "name": "jack", "age": 18 } */ // 2.6 用初始化器 JObject obj5 = new JObject() { { "name" , "李四" }, { "age", 29 } }; // 2.7 獲取值 int id; if (obj1["ID"] != null) { id = obj["ID"].Value<int>(); } JObject _jObject = JObject.Parse("{ID:{ID1:{ID2:'value',name:'valueName'}},'Name':'test','Mark':'Hello Word'}"); var _value = _jObject["ID"]["ID1"]["ID2"].ToString(); //取值 } /// <summary>添加一個屬性 /// C#給JSON對象添加一個鍵值對 /// </summary> /// <param name="obj">待添加屬性的對象</param> /// <param name="key">鍵名</param> /// <param name="value">值</param> /// <returns>添加屬性后的對象</returns> public static object Add(object obj, string key, object value) { JObject jObj = JObject.Parse(JsonConvert.SerializeObject(obj)); jObj.Add(new JProperty(key, value)); return JsonConvert.DeserializeObject(jObj.ToString()); } /// <summary>添加一個屬性 /// C#給JSON字符串添加一個鍵值對 /// </summary> /// <param name="obj">待添加屬性的對象</param> /// <param name="key">鍵名</param> /// <param name="value">值</param> /// <returns>添加屬性后的對象</returns> public static object AddStr(string obj, string key, object value) { JObject jObj = JObject.Parse(obj); jObj.Add(new JProperty(key, value)); return JsonConvert.DeserializeObject(jObj.ToString()); } } }