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
相关产品推荐
相关产品推荐

