如何将JObject列表反序列化为自定义.NET对象列表?
将List转换为自定义.NET对象列表的方法
方法1:使用LINQ Select(最简洁)
直接通过LINQ的Select遍历每个JObject,调用ToObject<MyModel>()完成单个转换,最后用ToList()生成目标列表:
List<MyModel> myModelList = lst.Select(jObj => jObj.ToObject<MyModel>()).ToList();
方法2:手动遍历循环(适合需要额外处理的场景)
如果需要在转换过程中对每个对象做验证、补全默认值等操作,手动循环更灵活:
List<MyModel> myModelList = new List<MyModel>(); foreach (JObject jObj in lst) { MyModel model = jObj.ToObject<MyModel>(); // 这里可以添加自定义处理逻辑,比如: // if (model.Id == 0) model.Id = Guid.NewGuid(); myModelList.Add(model); }
方法3:序列化后反序列化(备选方案)
借助Newtonsoft.Json的序列化/反序列化能力,将整个List<JObject>序列化为JSON字符串,再反序列化为List<MyModel>。这种方式效率略低于前两种,但在某些复杂场景下可用:
List<MyModel> myModelList = JsonConvert.DeserializeObject<List<MyModel>>(JsonConvert.SerializeObject(lst));
注意事项
- 确保
MyModel类的属性名称与JObject中的字段名一致,若名称不匹配,可使用[JsonProperty("字段名")]特性进行映射。 - 转换前需确认
JObject的结构与MyModel兼容,避免因字段缺失或类型不匹配导致的转换异常。
内容的提问来源于stack exchange,提问作者Sandeep Thomas
相关产品推荐
相关产品推荐

