C#下Newtonsoft.Json的具體使用
Newtonsoft.Json 是一個(gè)非常流行的 C# JSON 序列化和反序列化庫(kù),它可以方便地將 C# 對(duì)象轉(zhuǎn)換為 JSON 格式,或者將 JSON 數(shù)據(jù)解析為 C# 對(duì)象。Newtonsoft.Json 被廣泛用于處理 JSON 數(shù)據(jù),因其簡(jiǎn)單、高效且功能強(qiáng)大。
以下是 Newtonsoft.Json 在 C# 中的詳細(xì)使用教程。
安裝 Newtonsoft.Json
在使用 Newtonsoft.Json 之前,你需要安裝它。最簡(jiǎn)單的方式是通過(guò) NuGet:
- 打開(kāi) Visual Studio。
- 在解決方案資源管理器中右鍵點(diǎn)擊項(xiàng)目,然后選擇“管理 NuGet 包”。
- 搜索
Newtonsoft.Json,然后點(diǎn)擊“安裝”。
也可以使用以下命令通過(guò) NuGet 控制臺(tái)安裝:
Install-Package Newtonsoft.Json
基本用法
1. 序列化 C# 對(duì)象為 JSON
要將 C# 對(duì)象轉(zhuǎn)換為 JSON 字符串,可以使用 JsonConvert.SerializeObject() 方法。
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
var person = new Person
{
Name = "John",
Age = 30
};
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);
輸出:
{"Name":"John","Age":30}
2. 反序列化 JSON 為 C# 對(duì)象
要將 JSON 字符串轉(zhuǎn)換為 C# 對(duì)象,可以使用 JsonConvert.DeserializeObject<T>() 方法。
string json = "{\"Name\":\"John\",\"Age\":30}";
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name); // 輸出:John
Console.WriteLine(person.Age); // 輸出:30
高級(jí)用法
1. 序列化時(shí)格式化 JSON(縮進(jìn))
為了提高可讀性,可以使用 Formatting.Indented 選項(xiàng)將 JSON 格式化為縮進(jìn)的樣式:
string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented); Console.WriteLine(formattedJson);
輸出:
{
"Name": "John",
"Age": 30
}
2. 處理復(fù)雜對(duì)象
Newtonsoft.Json 可以處理復(fù)雜的對(duì)象,例如包含嵌套對(duì)象或集合的對(duì)象。
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Address Address { get; set; }
}
var person = new Person
{
Name = "John",
Age = 30,
Address = new Address { Street = "123 Main St", City = "New York" }
};
string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);
輸出:
{
"Name": "John",
"Age": 30,
"Address": {
"Street": "123 Main St",
"City": "New York"
}
}
3. 反序列化為動(dòng)態(tài)對(duì)象
可以將 JSON 解析為動(dòng)態(tài)對(duì)象,允許你在運(yùn)行時(shí)靈活地訪問(wèn) JSON 數(shù)據(jù)。
string json = "{\"Name\":\"John\",\"Age\":30}";
dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.Name); // 輸出:John
Console.WriteLine(obj.Age); // 輸出:30
4. 忽略屬性
如果你不希望某些屬性被序列化,可以使用 JsonIgnore 特性。
public class Person
{
public string Name { get; set; }
[JsonIgnore]
public int Age { get; set; }
}
var person = new Person
{
Name = "John",
Age = 30
};
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json); // 輸出:{"Name":"John"}
5. 更改屬性名稱
可以使用 JsonProperty 特性為屬性指定自定義的 JSON 字段名稱。
public class Person
{
[JsonProperty("full_name")]
public string Name { get; set; }
[JsonProperty("years")]
public int Age { get; set; }
}
var person = new Person
{
Name = "John",
Age = 30
};
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json); // 輸出:{"full_name":"John","years":30}
6. 處理枚舉
可以自定義枚舉的序列化方式,使其輸出字符串,而不是數(shù)字。
public enum Gender
{
Male,
Female
}
public class Person
{
public string Name { get; set; }
public Gender Gender { get; set; }
}
var person = new Person
{
Name = "John",
Gender = Gender.Male
};
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json); // 輸出:{"Name":"John","Gender":0}
string jsonWithStringEnum = JsonConvert.SerializeObject(person, new StringEnumConverter());
Console.WriteLine(jsonWithStringEnum); // 輸出:{"Name":"John","Gender":"Male"}
配置 JsonSerializerSettings
通過(guò) JsonSerializerSettings,你可以更細(xì)粒度地控制 JSON 序列化和反序列化行為。
JsonSerializerSettings settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore
};
string json = JsonConvert.SerializeObject(person, settings);
Console.WriteLine(json);
處理自定義對(duì)象(自定義序列化與反序列化)
你可以通過(guò)實(shí)現(xiàn) JsonConverter 自定義對(duì)象的序列化和反序列化行為。
public class CustomPersonConverter : JsonConverter<Person>
{
public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName("full_name");
writer.WriteValue(value.Name);
writer.WriteEndObject();
}
public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
return new Person { Name = (string)jo["full_name"] };
}
}
var person = new Person { Name = "John", Age = 30 };
string customJson = JsonConvert.SerializeObject(person, new CustomPersonConverter());
Console.WriteLine(customJson); // 輸出:{"full_name":"John"}
Person customPerson = JsonConvert.DeserializeObject<Person>(customJson, new CustomPersonConverter());
Console.WriteLine(customPerson.Name); // 輸出:John
處理 JSON 數(shù)組
你可以將 JSON 數(shù)組序列化和反序列化為 C# 集合類型,如 List<T> 或數(shù)組。
string jsonArray = "[{\"Name\":\"John\",\"Age\":30},{\"Name\":\"Jane\",\"Age\":25}]";
List<Person> people = JsonConvert.DeserializeObject<List<Person>>(jsonArray);
foreach (var person in people)
{
Console.WriteLine($"{person.Name}, {person.Age}");
}
總結(jié)
Newtonsoft.Json 是 C# 中最常用的 JSON 序列化和反序列化庫(kù)之一,具有強(qiáng)大的功能和易于使用的 API。它能夠處理簡(jiǎn)單和復(fù)雜的對(duì)象,支持定制化序列化、反序列化,適用于動(dòng)態(tài)對(duì)象以及復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
到此這篇關(guān)于C#下Newtonsoft.Json的具體使用的文章就介紹到這了,更多相關(guān)C# Newtonsoft.Json內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C# Newtonsoft.Json庫(kù)的常用屬性和方法詳解
- C#使用Newtonsoft.Json庫(kù)實(shí)現(xiàn)JSON數(shù)據(jù)中某個(gè)字段值的提取功能
- C# Newtonsoft.Json用法詳解
- C#使用Newtonsoft.Json中的JObject對(duì)象
- C# newtonsoft.json中文亂碼問(wèn)號(hào)的解決方案
- c# Newtonsoft.Json 常用方法總結(jié)
- C# Newtonsoft.Json 解析多嵌套json 進(jìn)行反序列化的實(shí)例
- c#添加Newtonsoft.Json包的操作
- C# Newtonsoft.Json 的使用說(shuō)明
相關(guān)文章
Unity Shader實(shí)現(xiàn)新手引導(dǎo)遮罩鏤空效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)新手引導(dǎo)遮罩鏤空效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
C#自定義函數(shù)NetxtString生成隨機(jī)字符串
這篇文章主要介紹了C#自定義函數(shù)NetxtString生成隨機(jī)字符串,是十分常見(jiàn)的重要功能,需要的朋友可以參考下2014-08-08
C#實(shí)現(xiàn)自定義線程池實(shí)例代碼
這篇文章介紹了C#實(shí)現(xiàn)自定義線程池的實(shí)例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C#使用SQLDMO操作數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了C#使用SQLDMO操作數(shù)據(jù)庫(kù)的方法,實(shí)例分析了基于SQLDMO.dll動(dòng)態(tài)鏈接庫(kù)操作數(shù)據(jù)庫(kù)的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C#對(duì)文件進(jìn)行批量重命名或者對(duì)某單個(gè)文件進(jìn)行改名的示例代碼
這篇文章主要介紹了C#對(duì)文件進(jìn)行批量重命名或者對(duì)某個(gè)單獨(dú)的文件進(jìn)行改名的實(shí)現(xiàn)方法,文中有相關(guān)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2024-05-05

