You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JsonConvert解析JSON遇反序列化错误,求类定义及解决办法

解决JsonConvert反序列化JSON对象为List类型的错误

这个错误我之前也碰到过,核心原因很直白:你想把JSON反序列化成集合类型(比如List),但实际拿到的JSON是一个单个对象(用{}包裹),而不是数组(用[]包裹),Json.NET肯定没法直接把单个对象转成集合呀。

下面给你两种场景的解决方案,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:31:23