我有这段代码:
string json2 = vc.Request(model.uri + "?fields=uri,transcode.status", "GET");
var deserial = JsonConvert.DeserializeObject<Dictionary<string, object>>(json2);
var transcode = deserial["transcode"];
var serial = JsonConvert.SerializeObject(transcode);
var deserial2 = JsonConvert.DeserializeObject<Dictionary<string, object>>(serial);
var upstatus = deserial2["status"].ToString();
我从服务器获得的json是:
{
"uri": "/videos/262240241",
"transcode": {
"status": "in_progress"
}
}
在VS2017上运行时,它可以正常工作。
但是在VS2010上我收到以下错误:
无法将当前JSON数组(例如[1,2,3])反序列化为类型 'System.Collections.Generic.Dictionary`2 [System.String,System.Object的]' 因为类型需要一个JSON对象(例如{“name”:“value”})来 正确反序列化。 要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或 实现集合接口的类型(例如ICollection,IList) 像可以从JSON数组反序列化的List。 JsonArrayAttribute也可以添加到类型中以强制它 从JSON数组反序列化。 路径'',第1行,第1位。
我正在使用Newtonsoft.Json。
有什么想法吗?
答案 0 :(得分:1)
您收到的json数据不是Dictionary<string, object>
它是一个对象
public class Transcode
{
public string status { get; set; }
}
public class VModel
{
public string uri { get; set; }
public Transcode transcode { get; set; }
}
您可以使用此对象
var deserial = JsonConvert.DeserializeObject<VModel>(json2);
插入
var deserial = JsonConvert.DeserializeObject<Dictionary<string, object>>(json2);
答案 1 :(得分:0)
由于某种原因删除了最佳答案,所以我发布它:
var deserial = JsonConvert.DeserializeObject<dynamic>(json2);
string upstatus = string.Empty;
upstatus = deserial.transcode.status.ToString();
答案 2 :(得分:0)
如果您的模型没有明确定义或是动态的,请使用
var deserial = JsonConvert.DeserializeObject<dynamic>(json2);
或者您可以尝试使用
JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json2);