C#实现的json序列化和反序列化代码实例
- 行业动态
- 2025-02-01
- 1
C# 实现的 JSON 序列化和反序列化代码实例:该实例展示了如何在 C# 中使用 System.Text.Json 命名空间进行 JSON 数据的序列化与反序列化操作,包括将对象转换为 JSON 字符串以及从 JSON 字符串还原为对象的过程。
在C#中,JSON序列化和反序列化是处理数据交换格式的常见需求,通过使用Newtonsoft.Json库(也称为Json.NET),我们可以方便地将对象转换为JSON字符串(序列化)以及将JSON字符串转换回对象(反序列化),下面是一个详细的代码实例,展示如何在C#中实现这些操作。
安装Json.NET库
你需要在你的项目中安装Json.NET库,你可以通过NuGet包管理器来安装:
Install-Package Newtonsoft.Json
创建示例类
创建一个示例类Person,包含一些基本属性:
public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } }
序列化对象为JSON字符串
使用JsonConvert.SerializeObject方法将Person对象序列化为JSON字符串:
using Newtonsoft.Json; class Program { static void Main(string[] args) { Person person = new Person { Name = "John Doe", Age = 30, Email = "johndoe@example.com" }; string jsonString = JsonConvert.SerializeObject(person); Console.WriteLine("Serialized JSON: " + jsonString); } }
输出结果:
{ "Name": "John Doe", "Age": 30, "Email": "johndoe@example.com" }
反序列化JSON字符串为对象
使用JsonConvert.DeserializeObject方法将JSON字符串反序列化为Person对象:
using Newtonsoft.Json; class Program { static void Main(string[] args) { string jsonString = @"{ ""Name"": ""John Doe"", ""Age"": 30, ""Email"": ""johndoe@example.com"" }"; Person person = JsonConvert.DeserializeObject<Person>(jsonString); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, Email: {person.Email}"); } }
输出结果:
Name: John Doe, Age: 30, Email: johndoe@example.com
处理复杂对象和集合
如果你的对象结构更复杂,比如包含嵌套对象或集合,Json.NET同样能够处理。
public class Address { public string Street { get; set; } public string City { get; set; } public string Country { get; set; } } public class PersonWithAddress : Person { public Address Address { get; set; } }
序列化和反序列化示例:
using Newtonsoft.Json; class Program { static void Main(string[] args) { PersonWithAddress person = new PersonWithAddress { Name = "Jane Smith", Age = 25, Email = "janesmith@example.com", Address = new Address { Street = "123 Elm St", City = "Somewhere", Country = "Neverland" } }; string jsonString = JsonConvert.SerializeObject(person, Formatting.Indented); Console.WriteLine("Serialized JSON with Indentation: "); Console.WriteLine(jsonString); PersonWithAddress deserializedPerson = JsonConvert.DeserializeObject<PersonWithAddress>(jsonString); Console.WriteLine($" Deserialized Object Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}, Email: {deserializedPerson.Email}"); Console.WriteLine($"Address Street: {deserializedPerson.Address.Street}, City: {deserializedPerson.Address.City}, Country: {deserializedPerson.Address.Country}"); } }
输出结果:
{ "Name": "Jane Smith", "Age": 25, "Email": "janesmith@example.com", "Address": { "Street": "123 Elm St", "City": "Somewhere", "Country": "Neverland" } }
FAQs
Q1: 如何处理JSON中的日期时间格式?
A1: Json.NET可以自动处理DateTime类型的序列化和反序列化,如果需要自定义格式,可以使用DateFormatHandling枚举来指定格式。
JsonSerializerSettings settings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, DateParseHandling = DateParseHandling.MicrosoftDateFormat }; string jsonString = JsonConvert.SerializeObject(new DateTime(2023, 10, 1), settings); DateTime dateTime = JsonConvert.DeserializeObject<DateTime>("2023-10-01T00:00:00", settings);
Q2: 如何处理循环引用导致的序列化问题?
A2: 循环引用会导致无限递归,从而引发栈溢出错误,可以通过设置ReferenceLoopHandling属性来避免这个问题:
JsonSerializerSettings settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; string jsonString = JsonConvert.SerializeObject(person, settings); Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonString, settings);
小编有话说
通过以上实例,我们展示了如何在C#中使用Json.NET库进行JSON的序列化和反序列化操作,无论是处理简单的对象还是复杂的嵌套结构,Json.NET都能提供强大的功能和灵活的配置选项,使得开发者能够轻松应对各种JSON数据处理需求,希望本文能帮助大家更好地掌握JSON在C#中的应用技巧!
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:https://www.xixizhuji.com/fuzhu/403535.html