C# Newtonsoft.Json庫(kù)的常用屬性和方法詳解
1. 安裝Newtonsoft.Json
首先,需要通過(guò)NuGet安裝Newtonsoft.Json庫(kù)??梢酝ㄟ^(guò)以下命令安裝:
Install-Package Newtonsoft.Json
2. 基本序列化和反序列化
序列化(將對(duì)象轉(zhuǎn)換為JSON字符串)
using Newtonsoft.Json; using System; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { // 創(chuàng)建一個(gè)Person對(duì)象 Person person = new Person { Name = "John", Age = 30 }; // 使用JsonConvert.SerializeObject方法將對(duì)象序列化為JSON字符串 string json = JsonConvert.SerializeObject(person); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"Name":"John","Age":30} } }
反序列化(將JSON字符串轉(zhuǎn)換為對(duì)象)
using Newtonsoft.Json; using System; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { // JSON字符串 string json = "{\"Name\":\"John\",\"Age\":30}"; // 使用JsonConvert.DeserializeObject方法將JSON字符串反序列化為Person對(duì)象 Person person = JsonConvert.DeserializeObject<Person>(json); // 輸出對(duì)象的屬性 Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // 輸出: Name: John, Age: 30 } }
3. 格式化JSON輸出
可以使用Formatting.Indented
來(lái)格式化JSON輸出,使其更易讀。
using Newtonsoft.Json; using System; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { // 創(chuàng)建一個(gè)Person對(duì)象 Person person = new Person { Name = "John", Age = 30 }; // 使用JsonConvert.SerializeObject方法將對(duì)象序列化為JSON字符串,并格式化輸出 string json = JsonConvert.SerializeObject(person, Formatting.Indented); // 輸出格式化后的JSON字符串 Console.WriteLine(json); // 輸出: // { // "Name": "John", // "Age": 30 // } } }
4. 處理JSON屬性名稱
可以使用[JsonProperty]
屬性來(lái)指定JSON屬性名稱與C#屬性名稱不同。
using Newtonsoft.Json; using System; public class Person { [JsonProperty("full_name")] public string Name { get; set; } [JsonProperty("years_old")] public int Age { get; set; } } class Program { static void Main() { // 創(chuàng)建一個(gè)Person對(duì)象 Person person = new Person { Name = "John", Age = 30 }; // 序列化對(duì)象 string json = JsonConvert.SerializeObject(person); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"full_name":"John","years_old":30} // 反序列化JSON字符串 Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json); // 輸出對(duì)象的屬性 Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); // 輸出: Name: John, Age: 30 } }
5. 忽略屬性
可以使用[JsonIgnore]
屬性來(lái)忽略某個(gè)屬性,使其不參與序列化和反序列化。
using Newtonsoft.Json; using System; public class Person { public string Name { get; set; } [JsonIgnore] public int Age { get; set; } } class Program { static void Main() { // 創(chuàng)建一個(gè)Person對(duì)象 Person person = new Person { Name = "John", Age = 30 }; // 序列化對(duì)象 string json = JsonConvert.SerializeObject(person); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"Name":"John"} // 反序列化JSON字符串 Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json); // 輸出對(duì)象的屬性 Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); // 輸出: Name: John, Age: 0 (Age被忽略,默認(rèn)值為0) } }
6. 處理空值
可以使用NullValueHandling
來(lái)控制序列化時(shí)如何處理空值。
using Newtonsoft.Json; using System; public class Person { public string Name { get; set; } public int? Age { get; set; } // 使用可空類型 } class Program { static void Main() { // 創(chuàng)建一個(gè)Person對(duì)象,Age為null Person person = new Person { Name = "John", Age = null }; // 序列化對(duì)象,忽略空值 var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; string json = JsonConvert.SerializeObject(person, settings); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"Name":"John"} // 反序列化JSON字符串 Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json); // 輸出對(duì)象的屬性 Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); // 輸出: Name: John, Age: (Age為null) } }
7. 自定義序列化和反序列化
可以通過(guò)實(shí)現(xiàn)JsonConverter
來(lái)自定義序列化和反序列化邏輯。
using Newtonsoft.Json; using System; public class Person { public string Name { get; set; } public int Age { get; set; } } public class PersonConverter : JsonConverter<Person> { public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer) { writer.WriteStartObject(); writer.WritePropertyName("full_name"); writer.WriteValue(value.Name); writer.WritePropertyName("years_old"); writer.WriteValue(value.Age); writer.WriteEndObject(); } public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer) { var jsonObject = JObject.Load(reader); return new Person { Name = (string)jsonObject["full_name"], Age = (int)jsonObject["years_old"] }; } } class Program { static void Main() { // 創(chuàng)建一個(gè)Person對(duì)象 Person person = new Person { Name = "John", Age = 30 }; // 使用自定義的PersonConverter進(jìn)行序列化 string json = JsonConvert.SerializeObject(person, new PersonConverter()); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"full_name":"John","years_old":30} // 使用自定義的PersonConverter進(jìn)行反序列化 Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json, new PersonConverter()); // 輸出對(duì)象的屬性 Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); // 輸出: Name: John, Age: 30 } }
8. 處理日期格式
可以使用DateFormatString
來(lái)指定日期的序列化格式。
using Newtonsoft.Json; using System; public class Event { public string Name { get; set; } public DateTime Date { get; set; } } class Program { static void Main() { // 創(chuàng)建一個(gè)Event對(duì)象 Event event = new Event { Name = "Conference", Date = new DateTime(2023, 10, 15) }; // 使用DateFormatString指定日期格式 var settings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd" }; string json = JsonConvert.SerializeObject(event, settings); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"Name":"Conference","Date":"2023-10-15"} // 反序列化JSON字符串 Event deserializedEvent = JsonConvert.DeserializeObject<Event>(json, settings); // 輸出對(duì)象的屬性 Console.WriteLine($"Name: {deserializedEvent.Name}, Date: {deserializedEvent.Date}"); // 輸出: Name: Conference, Date: 10/15/2023 12:00:00 AM } }
9. 處理循環(huán)引用
當(dāng)對(duì)象之間存在循環(huán)引用時(shí),可以使用ReferenceLoopHandling
來(lái)處理。
using Newtonsoft.Json; using System; public class Employee { public string Name { get; set; } public Employee Manager { get; set; } } class Program { static void Main() { // 創(chuàng)建兩個(gè)Employee對(duì)象,并形成循環(huán)引用 Employee employee1 = new Employee { Name = "John" }; Employee employee2 = new Employee { Name = "Jane", Manager = employee1 }; employee1.Manager = employee2; // 使用ReferenceLoopHandling.Ignore來(lái)處理循環(huán)引用 var settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; string json = JsonConvert.SerializeObject(employee1, settings); // 輸出JSON字符串 Console.WriteLine(json); // 輸出: {"Name":"John","Manager":{"Name":"Jane"}} } }
10. 使用LINQ to JSON
Newtonsoft.Json還提供了LINQ to JSON功能,允許使用LINQ查詢JSON數(shù)據(jù)。
using Newtonsoft.Json.Linq; using System; class Program { static void Main() { // JSON字符串 string json = "{\"Name\":\"John\",\"Age\":30,\"Address\":{\"City\":\"New York\",\"State\":\"NY\"}}"; // 解析JSON字符串為JObject JObject person = JObject.Parse(json); // 使用LINQ查詢JSON數(shù)據(jù) string name = (string)person["Name"]; int age = (int)person["Age"]; string city = (string)person["Address"]["City"]; // 輸出查詢結(jié)果 Console.WriteLine($"Name: {name}, Age: {age}, City: {city}"); // 輸出: Name: John, Age: 30, City: New York } }
總結(jié)
Newtonsoft.Json是一個(gè)非常強(qiáng)大且靈活的JSON處理庫(kù),提供了豐富的屬性和方法來(lái)處理JSON數(shù)據(jù)。通過(guò)上述代碼示例和詳細(xì)注釋,應(yīng)該能夠掌握如何使用Newtonsoft.Json進(jìn)行序列化、反序列化、格式化、處理屬性名稱、忽略屬性、處理空值、自定義序列化、處理日期格式、處理循環(huán)引用以及使用LINQ to JSON等功能。
以上就是C# Newtonsoft.Json庫(kù)的常用屬性和方法的詳細(xì)內(nèi)容,更多關(guān)于C# Newtonsoft.Json庫(kù)使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity實(shí)現(xiàn)毫秒延時(shí)回調(diào)功能
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)毫秒延時(shí)回調(diào)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09c#靜態(tài)方法和非靜態(tài)方法詳細(xì)介紹
這篇文章主要介紹了c#靜態(tài)方法和非靜態(tài)方法,需要的朋友可以參考下2014-02-02C#實(shí)現(xiàn)讓窗體永遠(yuǎn)在窗體最前面顯示的實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)讓窗體永遠(yuǎn)在窗體最前面顯示,功能非常實(shí)用,需要的朋友可以參考下2014-07-07C# ManagementObjectSearcher操作window案例詳解
這篇文章主要介紹了C# ManagementObjectSearcher操作window案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08深入C#中使用SqlDbType.Xml類型參數(shù)的使用詳解
本篇文章是對(duì)在C#中使用SqlDbType.Xml類型參數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#抓取網(wǎng)頁(yè)數(shù)據(jù) 解析標(biāo)題描述圖片等信息 去除HTML標(biāo)簽
本文主要一步一步介紹利用C#抓取頁(yè)面數(shù)據(jù)的過(guò)程,抓取HTML,獲取標(biāo)題、描述、圖片等信息,并去除HTML,希望對(duì)大家有所幫助。2016-04-04C#如何通過(guò)匿名類直接使用訪問(wèn)JSON數(shù)據(jù)詳解
這篇文章主要給大家介紹了關(guān)于C#如何通過(guò)匿名類直接使用訪問(wèn)JSON數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2018-02-02