无法将Newtonsoft.Json.Linq.JProperty强制转换为Newtonsoft.Json.Linq.JToken

时间:2012-11-02 20:58:50

标签: json.net jira

我正在尝试建立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"); } }
    }
}

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

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

我的解决方案是通过从解决方案中删除JSON.Net来简化操作,并且仅依赖于RestSharp(仅因为它使得请求变得如此容易)和System.Web.Script.Serialization.JavaScriptSerializer()。反序列化( response.Content)方法。