C#实现Json序列化与反序列化的全面解析

8 下载量 74 浏览量 更新于2024-09-04 收藏 203KB PDF 举报
"C#中实现Json序列化与反序列化的几种方式" 在C#中,JSON序列化和反序列化是将对象转换为JSON字符串和将JSON字符串还原为对象的过程。这对于数据交换和网络通信尤其有用。本文将探讨C#中实现这一功能的不同方法。 首先,让我们理解JSON的基础。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以文本形式存储和传输数据,易于人阅读,也易于机器解析和生成。JSON支持两种主要的数据结构: 1. 对象:无序的键值对集合,由大括号 `{}` 包围,每个键后跟一个冒号,键值对之间用逗号分隔。例如: ```json { "name": "Manas", "gender": "Male", "birthday": "1987-8-8" } ``` 2. 数组:有序的值列表,由方括号 `[]` 包围,值之间用逗号分隔。例如: ```json [ {"user": {"name": "Manas", "gender": "Male", "birthday": "1987-8-8"}}, {"user": {"name": "Mohapatra", "gender": "Female", "birthday": "1987-7-7"}} ] ``` 在C#中,有多种库和方法可以实现JSON序列化和反序列化: 1. System.Text.Json:这是.NET Core 3.0及更高版本内置的JSON库,提供高效的性能和简洁的API。序列化示例: ```csharp using System.Text.Json; public class User { public string Name { get; set; } public string Gender { get; set; } public DateTime Birthday { get; set; } } User user = new User { Name = "Manas", Gender = "Male", Birthday = new DateTime(1987, 8, 8) }; string jsonString = JsonSerializer.Serialize(user); ``` 反序列化: ```csharp User deserializedUser = JsonSerializer.Deserialize<User>(jsonString); ``` 2. Newtonsoft.Json (Json.NET):这是一个广泛使用的第三方库,功能强大且灵活。序列化: ```csharp using Newtonsoft.Json; User user = new User { Name = "Manas", Gender = "Male", Birthday = new DateTime(1987, 8, 8) }; string jsonString = JsonConvert.SerializeObject(user); ``` 反序列化: ```csharp User deserializedUser = JsonConvert.DeserializeObject<User>(jsonString); ``` 3. Microsoft.AspNetCore.Mvc.NewtonsoftJson:如果你在ASP.NET Core项目中工作,这个库允许你在使用System.Text.Json的同时,仍然可以依赖Json.NET。配置服务并在Startup.cs中添加以下代码: ```csharp services.AddControllers().AddNewtonsoftJson(); ``` 然后你可以按照上述Json.NET的方式进行序列化和反序列化。 4. DataContractJsonSerializer:虽然不如前两者常用,但它是.NET框架的一部分,适用于WCF服务。序列化: ```csharp using System.Runtime.Serialization.Json; [DataContract] public class User { [DataMember] public string Name { get; set; } [DataMember] public string Gender { get; set; } [DataMember] public DateTime Birthday { get; set; } } MemoryStream stream = new MemoryStream(); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User)); serializer.WriteObject(stream, user); string jsonString = Encoding.UTF8.GetString(stream.ToArray()); ``` 反序列化: ```csharp stream.Seek(0, SeekOrigin.Begin); User deserializedUser = (User)serializer.ReadObject(stream); ``` 每种方法都有其适用场景和优缺点。System.Text.Json是现代.NET框架的首选,因为它具有更好的性能和更低的内存占用。而Json.NET提供了更多的自定义选项和灵活性,对于复杂的应用场景可能更合适。DataContractJsonSerializer则主要用于与WCF服务交互。根据项目需求,可以选择最适合的库和方法。