【问题标题】:C# - Cannot deserialize the current JSON arrayC# - 无法反序列化当前 JSON 数组
【发布时间】:2018-03-29 07:51:38
【问题描述】:

我有这个代码:

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。

有什么想法吗?

【问题讨论】:

  • 答案很简单。请使用 Visual Studio json 特殊的过去来创建反序列化对象。
  • 我在下面问了一个问题,但是:您在 VS2017 和 VS2010 项目之间使用的框架版本是否相同? JSON.Net的版本是一样的吗?

标签: c# json json.net


【解决方案1】:

你收到的json数据不是Dictionary&lt;string, object&gt;,它是一个对象

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

【讨论】:

  • 提供的json也是一个有效的字典
  • @AaYy 你在 VS2017 和 VS2010 项目中使用的框架版本是否相同? JSON.Net的版本是一样的吗?
【解决方案2】:

由于某种原因,最佳答案已被删除,所以我会发布它:

var deserial = JsonConvert.DeserializeObject<dynamic>(json2);
string upstatus = string.Empty;
upstatus = deserial.transcode.status.ToString();

【讨论】:

    【解决方案3】:

    如果你的模型没有很好的定义或者是动态的,那么使用:

    var deserial = JsonConvert.DeserializeObject<dynamic>(json2);
    

    或者你可以尝试使用:

    JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多