C#中JSON字符串转对象及数组转JSON字符串的技术问询
嘿,刚好我之前处理过几乎一模一样的JSON结构转换需求,给你分享两种在C#里最常用的实现方式——一种是用.NET官方自带的System.Text.Json(现在是主推的原生库,不需要额外安装包),另一种是老牌的Newtonsoft.Json(Json.NET,兼容性好,很多老项目在用)。两种方案都包含你要的JSON转C#对象和数组转JSON字符串功能,你可以根据自己的项目环境选。
方案一:使用.NET原生System.Text.Json(推荐)
1. 先定义匹配JSON结构的C#实体类
首先得把你给的JSON结构映射成对应的C#类,我已经帮你写好了,注意用了可空引用类型来适配那些可能为null的字段(比如Team的Code、English翻译):
// 翻译类,对应Traductions节点 public class Traductions { public string? French { get; set; } public string? English { get; set; } } // 组信息类,对应Groupe节点 public class Groupe { public string? Code { get; set; } public Traductions? Traductions { get; set; } } // 业务单元类,对应BusinessUnit节点 public class BusinessUnit { public string? Code { get; set; } public Traductions? Traductions { get; set; } } // 团队类,对应Team节点 public class Team { public string? Code { get; set; } public Traductions? Traductions { get; set; } } // 职位类,对应Title、Title2节点 public class Title { public string? Code { get; set; } public Traductions? Traductions { get; set; } } // 根实体类,对应整个JSON对象 public class Employee { public string? Id { get; set; } public string? Acronym { get; set; } public string? FirstName { get; set; } public string? LastName { get; set; } public Groupe? Groupe { get; set; } public BusinessUnit? BusinessUnit { get; set; } public Team? Team { get; set; } public Title? Title { get; set; } public Title? Title2 { get; set; } }
2. JSON字符串转C#对象
用JsonSerializer.Deserialize方法就能轻松实现,代码示例:
using System.Text.Json; // 假设这是你接收到的JSON字符串 string jsonInput = "{ \"Id\": \"617723\", \"Acronym\": \"\", \"FirstName\": \"XXXXX\", \"LastName\": \"XXXXX\", \"Groupe\": { \"Code\": \"XXXXX\", \"Traductions\": { \"French\": \"\", \"English\": \"XXXXX\" } }, \"BusinessUnit\": { \"Code\": \"XXXXX\", \"Traductions\": { \"French\": \"\", \"English\": \"XXXXX\" } }, \"Team\": { \"Code\": null, \"Traductions\": { \"French\": \"\", \"English\": null } }, \"Title\": { \"Code\": null, \"Traductions\": { \"French\": \"\", \"English\": \"XXXXX\" } }, \"Title2\": { \"Code\": null, \"Traductions\": { \"French\": \"\" } } }"; // 转换为C#对象 Employee? employee = JsonSerializer.Deserialize<Employee>(jsonInput); // 现在你可以直接访问对象属性了,比如 if (employee != null) { Console.WriteLine($"员工ID: {employee.Id}"); Console.WriteLine($"英文职位: {employee.Title?.Traductions?.English}"); }
3. 数组(集合)转JSON字符串
如果有多个Employee对象组成的数组或集合,用JsonSerializer.Serialize方法即可,还可以加格式化选项让JSON更易读:
using System.Text.Json; // 构造一个员工数组 var employees = new List<Employee> { new Employee { Id = "617723", FirstName = "John", LastName = "Doe" }, new Employee { Id = "617724", FirstName = "Jane", LastName = "Smith" } }; // 转换为JSON字符串(格式化输出) string jsonOutput = JsonSerializer.Serialize(employees, new JsonSerializerOptions { WriteIndented = true }); Console.WriteLine(jsonOutput);
方案二:使用Newtonsoft.Json(Json.NET)
如果你项目里已经在用这个库,或者需要兼容旧版本.NET,也可以用这个方案,步骤类似:
1. 先安装NuGet包
首先在NuGet包管理器里搜索Newtonsoft.Json并安装,或者用命令行:
Install-Package Newtonsoft.Json
2. 实体类可以复用(也可以加[JsonProperty]特性精确映射)
实体类和上面的一样,不需要改;如果需要更精确的字段映射(比如属性名和JSON字段名不一致),可以加[JsonProperty("字段名")]特性,比如:
public class Employee { [JsonProperty("Id")] public string? EmployeeId { get; set; } // 其他属性... }
3. JSON字符串转C#对象
用JsonConvert.DeserializeObject方法:
using Newtonsoft.Json; string jsonInput = "你的JSON字符串"; Employee? employee = JsonConvert.DeserializeObject<Employee>(jsonInput); // 访问属性 if (employee != null) { Console.WriteLine($"员工姓名: {employee.FirstName} {employee.LastName}"); }
4. 数组(集合)转JSON字符串
用JsonConvert.SerializeObject方法,同样支持格式化:
using Newtonsoft.Json; var employees = new List<Employee> { new Employee { Id = "617723", FirstName = "John" }, new Employee { Id = "617724", FirstName = "Jane" } }; // 格式化输出JSON string jsonOutput = JsonConvert.SerializeObject(employees, Formatting.Indented); Console.WriteLine(jsonOutput);
内容的提问来源于stack exchange,提问作者Alex Caron
相关产品推荐
相关产品推荐

