开发者

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)其它相关文章!

                    0

                    上一篇:

                    下一篇:

                    精彩评论

                    暂无评论...
                    验证码 换一张
                    取 消

                    最新开发

                    开发排行榜