C# Newtonsoft.Json庫的常用屬性和方法詳解
1. 安裝Newtonsoft.Json
首先,需要通過NuGet安裝Newtonsoft.Json庫??梢酝ㄟ^以下命令安裝:
Install-Package Newtonsoft.Json
2. 基本序列化和反序列化
序列化(將對象轉換為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)建一個Person對象
Person person = new Person { Name = "John", Age = 30 };
// 使用JsonConvert.SerializeObject方法將對象序列化為JSON字符串
string json = JsonConvert.SerializeObject(person);
// 輸出JSON字符串
Console.WriteLine(json);
// 輸出: {"Name":"John","Age":30}
}
}
反序列化(將JSON字符串轉換為對象)
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對象
Person person = JsonConvert.DeserializeObject<Person>(json);
// 輸出對象的屬性
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
// 輸出: Name: John, Age: 30
}
}
3. 格式化JSON輸出
可以使用Formatting.Indented來格式化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)建一個Person對象
Person person = new Person { Name = "John", Age = 30 };
// 使用JsonConvert.SerializeObject方法將對象序列化為JSON字符串,并格式化輸出
string json = JsonConvert.SerializeObject(person, Formatting.Indented);
// 輸出格式化后的JSON字符串
Console.WriteLine(json);
// 輸出:
// {
// "Name": "John",
// "Age": 30
// }
}
}
4. 處理JSON屬性名稱
可以使用[JsonProperty]屬性來指定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)建一個Person對象
Person person = new Person { Name = "John", Age = 30 };
// 序列化對象
string json = JsonConvert.SerializeObject(person);
// 輸出JSON字符串
Console.WriteLine(json);
// 輸出: {"full_name":"John","years_old":30}
// 反序列化JSON字符串
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
// 輸出對象的屬性
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
// 輸出: Name: John, Age: 30
}
}
5. 忽略屬性
可以使用[JsonIgnore]屬性來忽略某個屬性,使其不參與序列化和反序列化。
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)建一個Person對象
Person person = new Person { Name = "John", Age = 30 };
// 序列化對象
string json = JsonConvert.SerializeObject(person);
// 輸出JSON字符串
Console.WriteLine(json);
// 輸出: {"Name":"John"}
// 反序列化JSON字符串
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
// 輸出對象的屬性
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
// 輸出: Name: John, Age: 0 (Age被忽略,默認值為0)
}
}
6. 處理空值
可以使用NullValueHandling來控制序列化時如何處理空值。
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)建一個Person對象,Age為null
Person person = new Person { Name = "John", Age = null };
// 序列化對象,忽略空值
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);
// 輸出對象的屬性
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
// 輸出: Name: John, Age: (Age為null)
}
}
7. 自定義序列化和反序列化
可以通過實現(xiàn)JsonConverter來自定義序列化和反序列化邏輯。
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)建一個Person對象
Person person = new Person { Name = "John", Age = 30 };
// 使用自定義的PersonConverter進行序列化
string json = JsonConvert.SerializeObject(person, new PersonConverter());
// 輸出JSON字符串
Console.WriteLine(json);
// 輸出: {"full_name":"John","years_old":30}
// 使用自定義的PersonConverter進行反序列化
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json, new PersonConverter());
// 輸出對象的屬性
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
// 輸出: Name: John, Age: 30
}
}
8. 處理日期格式
可以使用DateFormatString來指定日期的序列化格式。
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)建一個Event對象
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);
// 輸出對象的屬性
Console.WriteLine($"Name: {deserializedEvent.Name}, Date: {deserializedEvent.Date}");
// 輸出: Name: Conference, Date: 10/15/2023 12:00:00 AM
}
}
9. 處理循環(huán)引用
當對象之間存在循環(huán)引用時,可以使用ReferenceLoopHandling來處理。
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)建兩個Employee對象,并形成循環(huán)引用
Employee employee1 = new Employee { Name = "John" };
Employee employee2 = new Employee { Name = "Jane", Manager = employee1 };
employee1.Manager = employee2;
// 使用ReferenceLoopHandling.Ignore來處理循環(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"];
// 輸出查詢結果
Console.WriteLine($"Name: {name}, Age: {age}, City: {city}");
// 輸出: Name: John, Age: 30, City: New York
}
}
總結
Newtonsoft.Json是一個非常強大且靈活的JSON處理庫,提供了豐富的屬性和方法來處理JSON數(shù)據(jù)。通過上述代碼示例和詳細注釋,應該能夠掌握如何使用Newtonsoft.Json進行序列化、反序列化、格式化、處理屬性名稱、忽略屬性、處理空值、自定義序列化、處理日期格式、處理循環(huán)引用以及使用LINQ to JSON等功能。
以上就是C# Newtonsoft.Json庫的常用屬性和方法的詳細內容,更多關于C# Newtonsoft.Json庫使用的資料請關注腳本之家其它相關文章!
- C#下Newtonsoft.Json的具體使用
- C#使用Newtonsoft.Json庫實現(xiàn)JSON數(shù)據(jù)中某個字段值的提取功能
- C# Newtonsoft.Json用法詳解
- C#使用Newtonsoft.Json中的JObject對象
- C# newtonsoft.json中文亂碼問號的解決方案
- c# Newtonsoft.Json 常用方法總結
- C# Newtonsoft.Json 解析多嵌套json 進行反序列化的實例
- c#添加Newtonsoft.Json包的操作
- C# Newtonsoft.Json 的使用說明
- C#中Newtonsoft.Json 到 System.Text.Json 遷移避坑指南
相關文章
c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版)
這篇文章主要介紹了c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下2021-03-03

