如何用JSON.Net的LINQ to JSON将JSON解析为含父子关系的自定义对象?
当然可以!用LINQ to JSON处理嵌套自定义类完全没问题
LINQ to JSON(也就是Json.NET里的JObject/JArray这套API)完全支持处理这种包含嵌套自定义类集合的场景,不管是单个嵌套对象还是集合都能轻松搞定。我给你写个完整的示例,一看就懂:
第一步:定义你的自定义类
先把Order和OrderDetail类的结构写好:
public class Order { public int OrderId { get; set; } public DateTime OrderDate { get; set; } public string CustomerName { get; set; } public List<OrderDetail> OrderDetails { get; set; } } public class OrderDetail { public int ProductId { get; set; } public string ProductName { get; set; } public int Quantity { get; set; } public decimal UnitPrice { get; set; } }
第二步:准备示例JSON数据
假设你的订单JSON长这样:
{ "OrderId": 1001, "OrderDate": "2024-05-20T14:30:00", "CustomerName": "John Doe", "OrderDetails": [ { "ProductId": 1, "ProductName": "Laptop", "Quantity": 1, "UnitPrice": 999.99 }, { "ProductId": 2, "ProductName": "Mouse", "Quantity": 2, "UnitPrice": 25.50 } ] }
第三步:用LINQ to JSON解析并填充对象
核心思路是先把JSON解析成JObject,然后逐个提取字段值;对于集合类型(比如OrderDetails),用LINQ遍历JArray并转换为OrderDetail对象:
using Newtonsoft.Json.Linq; // 假设json是你的订单JSON字符串 string json = "..."; // 替换为上面的示例JSON // 解析JSON到JObject JObject orderJson = JObject.Parse(json); // 构建Order对象 Order order = new Order { OrderId = orderJson["OrderId"].Value<int>(), OrderDate = orderJson["OrderDate"].Value<DateTime>(), CustomerName = orderJson["CustomerName"].Value<string>(), // 处理OrderDetails集合:遍历JArray,转成OrderDetail列表 OrderDetails = orderJson["OrderDetails"] .Select(detail => new OrderDetail { ProductId = detail["ProductId"].Value<int>(), ProductName = detail["ProductName"].Value<string>(), Quantity = detail["Quantity"].Value<int>(), UnitPrice = detail["UnitPrice"].Value<decimal>() }) .ToList() };
额外提示:场景选择
如果你的JSON结构和类结构完全匹配,其实直接用JsonConvert.DeserializeObject<Order>(json)更简洁高效。但如果需要做一些自定义操作(比如只提取部分字段、转换字段名、处理JSON里的异常值),LINQ to JSON的灵活性就体现出来了——你可以精准控制每一步的解析逻辑。
内容的提问来源于stack exchange,提问作者webworm
相关产品推荐
相关产品推荐

