C#中如何从嵌套JSON对象提取值并转换为列表
C#中如何从嵌套JSON对象提取值并转换为列表
嘿,刚接触C#的你是不是正头疼怎么把JSON字符串转换成规整的列表呀?别担心,我来给你一步步捋清楚怎么弄!
首先,咱们得先明确目标:要把JSON里的firstName、lastName、departmentID提取出来,转成类似下面这样的结构化列表:
firstName lastName departmentID John Doe AAA111 John2 Doe2 BBB222
第一步:定义对应实体类
不管用哪种JSON解析方式,先定义一个和要提取字段匹配的实体类,这样后续解析会非常方便:
public class Employee { public string firstName { get; set; } public string lastName { get; set; } public string departmentID { get; set; } }
方法一:用C#内置的System.Text.Json(无需额外安装包)
这是微软官方自带的JSON处理库,不用额外装NuGet包,直接就能用。假设你的JSON是数组形式(就像你代码里写的开头是[]),代码可以这么写:
public IActionResult JsonTest() { // 先把完整的JSON字符串补全,示例如下 var respJSON = @" [ { ""firstName"": ""John"", ""lastName"": ""Doe"", ""departmentID"": ""AAA111"" }, { ""firstName"": ""John2"", ""lastName"": ""Doe2"", ""departmentID"": ""BBB222"" } ]"; // 反序列化成List<Employee> var employeeList = System.Text.Json.JsonSerializer.Deserialize<List<Employee>>(respJSON); // 要是你想输出成表格样式的文本,直接遍历拼接就行 foreach (var emp in employeeList) { Console.WriteLine($"{emp.firstName,-12} {emp.lastName,-10} {emp.departmentID}"); } return Ok(employeeList); }
方法二:用Newtonsoft.Json(第三方库,灵活度更高)
如果你的JSON结构比较复杂,Newtonsoft.Json(也就是Json.NET)会更灵活,不过需要先在NuGet里安装Newtonsoft.Json包。代码思路和内置库差不多:
public IActionResult JsonTest() { var respJSON = @" [ { ""firstName"": ""John"", ""lastName"": ""Doe"", ""departmentID"": ""AAA111"" }, { ""firstName"": ""John2"", ""lastName"": ""Doe2"", ""departmentID"": ""BBB222"" } ]"; // 反序列化成List<Employee> var employeeList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Employee>>(respJSON); // 同样可以遍历输出表格样式 foreach (var emp in employeeList) { Console.WriteLine($"{emp.firstName,-12} {emp.lastName,-10} {emp.departmentID}"); } return Ok(employeeList); }
要是JSON是嵌套结构怎么办?
比如你的JSON里字段是嵌套在子对象里的,像这样:
[ { "personInfo": { "firstName": "John", "lastName": "Doe" }, "deptInfo": { "departmentID": "AAA111" } } ]
那也不用慌,咱们可以用LINQ配合匿名类来提取值:
var options = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }; var rawItems = System.Text.Json.JsonSerializer.Deserialize<List<dynamic>>(respJSON, options); // 从嵌套对象里提取值,转成目标列表 var employeeList = rawItems.Select(item => new Employee { firstName = item.personInfo.firstName, lastName = item.personInfo.lastName, departmentID = item.deptInfo.departmentID }).ToList();
按照这个思路来,不管JSON是简单数组还是嵌套结构,都能轻松提取出你要的字段,转成想要的列表啦!
备注:内容来源于stack exchange,提问作者Milacay
相关产品推荐
相关产品推荐

