使用JsonConvert解析JSON遇反序列化错误,求类定义及解决办法
解决JsonConvert反序列化JSON对象为List类型的错误
这个错误我之前也碰到过,核心原因很直白:你想把JSON反序列化成集合类型(比如List
下面给你两种场景的解决方案,C#和VB.NET的代码都有:
场景1:JSON本身就是单个对象(正确做法)
如果你的JSON本来就只是一个对象,那根本不需要用List来接收,直接定义对应的实体类就行。
举个例子,假设你的JSON结构是这样的:
{ "Id": 1, "Title": "Sample Data", "Content": "Test Content" }
C# 代码
首先定义对应的实体类:
public class DataWrapper { public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } }
然后反序列化:
// jsonString是你的JSON字符串 var data = JsonConvert.DeserializeObject<DataWrapper>(jsonString);
VB.NET 代码
定义实体类:
Public Class DataWrapper Public Property Id As Integer Public Property Title As String Public Property Content As String End Class
反序列化:
' jsonString是你的JSON字符串 Dim data = JsonConvert.DeserializeObject(Of DataWrapper)(jsonString)
场景2:业务上必须转成List集合
如果因为业务逻辑要求,必须把这个单个对象放到List里,那可以先反序列化成单个对象,再手动添加到集合中:
C# 代码
var singleData = JsonConvert.DeserializeObject<DataWrapper>(jsonString); var dataList = new List<DataWrapper> { singleData };
或者用JObject直接转换:
var jObject = JObject.Parse(jsonString); var dataList = new List<DataWrapper> { jObject.ToObject<DataWrapper>() };
VB.NET 代码
Dim singleData = JsonConvert.DeserializeObject(Of DataWrapper)(jsonString) Dim dataList = New List(Of DataWrapper) From { singleData }
另外给你个小技巧:如果不确定JSON对应的类怎么写,可以用Visual Studio的**「编辑」→「选择性粘贴」→「将JSON粘贴为类」**功能,直接把JSON字符串粘贴成对应的实体类,既快又不容易出错。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

