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

C#无法反序列化当前JSON数组问题咨询

解决"无法反序列化当前JSON数组"的问题

兄弟,你碰到这个错误的核心原因很明确:你代码里默认把transcode当成了单个JSON对象来处理,但实际上服务器返回的transcode是一个JSON数组(比如[{"status": "xxx"}]这种格式),两者类型不匹配,自然就报错了。

先确认实际的JSON结构

你提到返回的JSON开头是{ "uri": "/videos/262240241", "transcode":...,大概率完整结构是类似这样的:

{
"uri": "/videos/262240241",
"transcode": [
{ "status": "completed" }
]
}

两种解决方案

方案一:直接处理数组(快速修改)

把原来针对单个对象的反序列化改成数组列表的形式:

string json2 = vc.Request(model.uri + "?fields=uri,transcode.status", "GET");
var deserial = JsonConvert.DeserializeObject<Dictionary<string, object>>(json2);
// 把transcode反序列化为Dictionary的列表,对应JSON数组
var transcodeList = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(deserial["transcode"].ToString());

// 数组里一般至少有一个元素,取第一个的status
if (transcodeList?.Count > 0)
{
    var upstatus = transcodeList[0]["status"].ToString();
    // 这里写你的后续业务逻辑
}
else
{
    // 处理transcode为空数组的异常情况
}

方案二:用强类型类(更规范,推荐)

定义和JSON结构对应的实体类,这样代码可读性和维护性更好:

// 定义对应返回结构的类
public class VideoTranscodeResponse
{
    public string uri { get; set; }
    public List<TranscodeDetail> transcode { get; set; }
}

public class TranscodeDetail
{
    public string status { get; set; }
}

// 反序列化代码
string json2 = vc.Request(model.uri + "?fields=uri,transcode.status", "GET");
var response = JsonConvert.DeserializeObject<VideoTranscodeResponse>(json2);

if (response?.transcode?.Count > 0)
{
    var upstatus = response.transcode[0].status;
    // 后续逻辑
}

小提示

如果拿不准返回的JSON具体结构,可以把json2的内容打印出来,或者用VS自带的JSON可视化工具查看,确认transcode的类型到底是对象还是数组,这样修改起来更精准。

内容的提问来源于stack exchange,提问作者Aa Yy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:47:36