从Json中检索值

时间:2017-11-20 12:46:54

标签: c# json serialization json.net

我有以下sctructure JSON数据。

Json数据:

{
  "items" : [ {
    "downloadUrl" : "XXXX",
    "path" : "XXXX",
    "id" : "XXXX",
    "repository" : "XXXX",
    "format" : "XXXX",
  }, {
    "downloadUrl" : "XXXX",
    "path" : "XXXX",
    "id" : "XXXX",
    "repository" : "XXXX",
    "format" : "XXXX",
  }, {
    "downloadUrl" : "XXXX",
    "path" : "XXXX",,
    "id" : "XXXX",
    "repository" : "XXXX",
    "format" : "XXXX",
  } ],
  "continuationToken" : "YYYY"
}

我需要在List(List<repository>)中获取项值。如何检索值?

downloadUrl,路径,ID,仓库,格式,continuoationToken

我试着像这样下面。

class Program
    {
        public class repository
        {
            public NpmPackages items { get; set; }
        }
        public class NpmPackages
        {
            [JsonProperty(PropertyName = "downloadUrl")]
            public string DownloadUrl { get; set; }

            [JsonProperty(PropertyName = "path")]
            public string Path { get; set; }

            [JsonProperty(PropertyName = "id")]
            public string Id { get; set; }

            [JsonProperty(PropertyName = "repository")]
            public string Repository { get; set; }

            [JsonProperty(PropertyName = "format")]
            public string Format { get; set; }
        }
        public static string HttpOperation(string apiUrl)
        {
            if (string.IsNullOrEmpty(apiUrl) == true)
            {
                throw new ArgumentNullException(nameof(apiUrl));
            }

            Uri url = new Uri(apiUrl);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
        }

        static void Main(string[] args)
        {
            List<repository> packageDetails = new List<repository>();
            List<repository> packageData = new List<repository>();
            var jsonData = HttpOperation("XXXX");
            packageData = JsonConvert.DeserializeObject<List<repository>>(jsonData);
            packageDetails.AddRange(packageData);

        }
    }

虽然尝试这样,但我面临以下错误。

错误详情:

无法将当前JSON对象(例如{&#34; name&#34;:&#34; value&#34;})反序列化为类型System.Collections.Generic.List`1 [npm_clean_up_Tool.Program + NpmPackages]&#39;因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径&#39;项目&#39;,第2行,第11位。

请更新您的建议以实现我的目标。

1 个答案:

答案 0 :(得分:0)

Newtonsoft.Json.JsonConvert.DeserializeObject<NpmPackages>(jsonstring.ToString());