C# - 无法反序列化当前的JSON数组

时间:2018-03-29 07:51:39

标签: c# json json.net

我有这段代码:

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。

有什么想法吗?

3 个答案:

答案 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);