C# Newtonsoft.Json库的常用属性和方法详解
目录
- 1. 安装Newtonsoft.json
- 2. 基本序列化和反序列化
- 序列化(将对象转换为JSON字符串)
- 反序列化(将JSON字符串转换为对象)
- 3. 格式化JSON输出
- 4. 处理JSON属性名称
- 5. 忽略属性
- 6. 处理空值
- 7. 自定义序列化和反序列化
- 8. 处理日期格式
- 9. 处理循环引用
- 10. 使用LINQ to 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() { // 创建一个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 { statjsic 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() { // 创建一个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 //php } } }
4. 处理JSON属性名称
可以使用[JsonProperty]
属性来指定JSON属性名称与C#属性名称不同。
ujavascriptsing 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() { // 创建一个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() { // 创建一个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() { // 创建一个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($"Namjavascripte: {deserializedPerson.Name}, Age: {deserializedPerson.Age}"); // 输出: Name: John, Age: (GOrgaVUAge为null) } }
7. 自定义序列化和反序列化
可以通过实现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() { // 创建一个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() { // 创建一个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. 处理循环引用
当对象之间存在循环引用时,可以使用ReferenceLoopHandling
来处理。
using Newtonsoft.Json; using System; public class Employee { public string Name { get; set; } public Employee Manager { get; set; } } class Program { static void Main() { // 创建两个Employee对象,并形成循环引用 Employee employee1 = new Employee { Name = "John" }; Employee employee2 = new Employee { Name = "Jane", Manager = employee1 }; employee1.Manager = employee2; // 使用ReferenceLoopHandling.Ignore来处理循环引用 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数据。
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数据 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数据。通过上述代码示例和详细注释,应该能够掌握如何使用Newtonsoft.Json进行序列化、反序列化、格式化、处理属性名称、忽略属性、处理空值、自定义序列化、处理日期格式、处理循环引用以及使用LINQ to JSON等功能。
以上就是C# Newtonsoft.Json库的常用属性和方法的详细内容,更多关于C# Newtonsoft.Json库使用的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论