C# json 序列化 转实体类

本文介绍System.Web.Script.Serialization.JavaScriptSerializer组件的使用方法及应用场景,此组件主要用于.NET环境中实现JavaScript对象与.NET对象之间的序列化与反序列化。

System.Web.Script.Serialization.JavaScriptSerializer

C# 中将 JSON 数据反序列化实体类是一个常见的需求,尤其是在处理 Web 请求或文件数据时。以下是一些常用的方法和注意事项。 ### 使用 `Newtonsoft.Json` 进行反序列化 `Newtonsoft.Json`(也称为 Json.NET)是一个广泛使用的第三方库,提供了强大的 JSON 处理功能。反序列化 JSON 字符串实体类对象的过程非常简单。假设有一个 `Student` 类,定义如下: ```csharp public class Student { public int studentID { get; set; } public string studentName { get; set; } public int studentAge { get; set; } public string studentSex { get; set; } } ``` 可以使用以下代码将 JSON 字符串序列化为 `Student` 对象: ```csharp using Newtonsoft.Json; // 假设有一个 JSON 字符串 string json = "{\"studentID\":1,\"studentName\":\"张三\",\"studentAge\":18,\"studentSex\":\"男\"}"; // 反序列化为 Student 实体类对象 Student student = JsonConvert.DeserializeObject<Student>(json); ``` ### 处理多级嵌套 JSON 对于多级嵌套的 JSON 数据,首先需要定义与 JSON 结构相对应的实体类。例如,假设有一个包含 `Student` 信息的 `RootObject` 类: ```csharp public class RootObject { public Student student { get; set; } } public class Student { public int studentID { get; set; } public string studentName { get; set; } public int studentAge { get; set; } public string studentSex { get; set; } } ``` 如果 JSON 数据存储在一个文件中,可以使用以下代码读取并反序列化: ```csharp using System.IO; using Newtonsoft.Json; // 读取 JSON 文件内容 string jsonString = File.ReadAllText(@"D:\2021\test.json"); // 反序列化为 RootObject 实体类对象 RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString); ``` ### 必填字段校验 在某些情况下,可能需要确保反序列化后的对象满足特定的业务逻辑要求,例如某些字段必须存在且不为空。可以通过数据注解来实现这一点。例如: ```csharp using System.ComponentModel.DataAnnotations; public class Student { [Required(ErrorMessage = "学生ID是必填项")] public int studentID { get; set; } [Required(ErrorMessage = "学生姓名是必填项")] public string studentName { get; set; } [Range(1, 100, ErrorMessage = "年龄必须在1到100之间")] public int studentAge { get; set; } [Required(ErrorMessage = "性别是必填项")] public string studentSex { get; set; } } ``` 在反序列化后,可以使用 `Validator` 类来验证对象是否符合这些规则: ```csharp using System.ComponentModel.DataAnnotations; using System.Text; public static bool ValidateObject(object obj, out string errorMessage) { var validationContext = new ValidationContext(obj); var validationResults = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(obj, validationContext, validationResults, true); if (!isValid) { var errorBuilder = new StringBuilder(); foreach (var result in validationResults) { errorBuilder.AppendLine(result.ErrorMessage); } errorMessage = errorBuilder.ToString(); } else { errorMessage = null; } return isValid; } ``` 使用示例: ```csharp Student student = JsonConvert.DeserializeObject<Student>(json); string errorMessage; if (!ValidateObject(student, out errorMessage)) { Console.WriteLine("验证失败: " + errorMessage); } else { Console.WriteLine("验证成功"); } ``` ### 总结 通过上述方法,可以在 C# 中轻松地将 JSON 数据反序列化实体类,并对反序列化后的对象进行必要的校验,以确保数据的完整性和有效性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值