C#下Newtonsoft.Json的具體使用
Newtonsoft.Json
是一個非常流行的 C# JSON 序列化和反序列化庫,它可以方便地將 C# 對象轉換為 JSON 格式,或者將 JSON 數(shù)據(jù)解析為 C# 對象。Newtonsoft.Json
被廣泛用于處理 JSON 數(shù)據(jù),因其簡單、高效且功能強大。
以下是 Newtonsoft.Json
在 C# 中的詳細使用教程。
安裝 Newtonsoft.Json
在使用 Newtonsoft.Json
之前,你需要安裝它。最簡單的方式是通過 NuGet:
- 打開 Visual Studio。
- 在解決方案資源管理器中右鍵點擊項目,然后選擇“管理 NuGet 包”。
- 搜索
Newtonsoft.Json
,然后點擊“安裝”。
也可以使用以下命令通過 NuGet 控制臺安裝:
Install-Package Newtonsoft.Json
基本用法
1. 序列化 C# 對象為 JSON
要將 C# 對象轉換為 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# 對象
要將 JSON 字符串轉換為 C# 對象,可以使用 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
高級用法
1. 序列化時格式化 JSON(縮進)
為了提高可讀性,可以使用 Formatting.Indented
選項將 JSON 格式化為縮進的樣式:
string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented); Console.WriteLine(formattedJson);
輸出:
{ "Name": "John", "Age": 30 }
2. 處理復雜對象
Newtonsoft.Json
可以處理復雜的對象,例如包含嵌套對象或集合的對象。
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. 反序列化為動態(tài)對象
可以將 JSON 解析為動態(tài)對象,允許你在運行時靈活地訪問 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
通過 JsonSerializerSettings
,你可以更細粒度地控制 JSON 序列化和反序列化行為。
JsonSerializerSettings settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; string json = JsonConvert.SerializeObject(person, settings); Console.WriteLine(json);
處理自定義對象(自定義序列化與反序列化)
你可以通過實現(xiàn) JsonConverter
自定義對象的序列化和反序列化行為。
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}"); }
總結
Newtonsoft.Json
是 C# 中最常用的 JSON 序列化和反序列化庫之一,具有強大的功能和易于使用的 API。它能夠處理簡單和復雜的對象,支持定制化序列化、反序列化,適用于動態(tài)對象以及復雜的數(shù)據(jù)結構。
到此這篇關于C#下Newtonsoft.Json的具體使用的文章就介紹到這了,更多相關C# Newtonsoft.Json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Unity Shader實現(xiàn)新手引導遮罩鏤空效果
這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)新手引導遮罩鏤空效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02C#自定義函數(shù)NetxtString生成隨機字符串
這篇文章主要介紹了C#自定義函數(shù)NetxtString生成隨機字符串,是十分常見的重要功能,需要的朋友可以參考下2014-08-08