【问题标题】:Cannot cast Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JToken无法将 Newtonsoft.Json.Linq.JProperty 转换为 Newtonsoft.Json.Linq.JToken
【发布时间】:2012-11-02 20:58:49
【问题描述】:

我正在尝试构建 Mike Jansen 的 JIRA REST Client,并且我正在尝试获取 JIRA 版本信息。我是 JSON 新手,所以我不确定这只是格式问题还是什么。

调试时,我有以下令牌:

{[
  {
    "self": "https://<company>.atlassian.net/rest/api/2/version/10101",
    "id": "10101",
    "name": "2012.3",
    "archived": false,
    "released": false,
    "releaseDate": "2012-10-08"
  },
  {
    "self": "https://<company>.atlassian.net/rest/api/2/version/10200",
    "id": "10200",
    "name": "2012.4",
    "archived": false,
    "released": false
  }
]}

还有下面这行代码

token.Children().Values<T>()

抛出以下错误

Cannot cast Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JToken

在尝试将两个版本标记转换为相应的 JiraVersion 类时:

using System;
namespace JiraRestClient
{
    public class JiraVersion : JiraObjectBase, IJiraVersion
    {
        public JiraVersion(IJiraRestResponse jiraResponse) : base(jiraResponse) { }
        public string Id { get { return Get<string>("Id", "id"); } }
        public string Name { get { return Get<string>("Name", "name"); } }
    }
}

有人可以帮帮我吗?

【问题讨论】:

    标签: json.net jira


    【解决方案1】:

    熟悉 JSON 的人可能很快注意到它实际上是格式问题(包含数组的额外花括号)。就像我说的,我是 JSON 新手,但我研究的最终结果是 JsonWrapper.TryGetPath(...) 方法尝试遍历 JObject 树并且当检索的是数组时不会生成格式正确的 JSON .

    我的解决方案是通过从解决方案中删除 JSON.Net 并仅依赖于 RestSharp(只是因为它使发出请求变得如此容易)和 System.Web.Script.Serialization.JavaScriptSerializer().Deserialize( response.Content) 方法。

    【讨论】:

    • 仅作记录:如果您尝试访问像数组一样的实际对象,您也会在有效 JSON 中得到这个确切的错误。
    猜你喜欢
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2020-11-12
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多