2017-11-20 12 views
0

다음과 같은 sctructure JSON 데이터가 있습니다.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<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 객체를 직렬화 할 수 없습니다 (예 : { "이름": "값"}) 타입으로 'System.Collections.Generic.List`1 [npm_clean_up_Tool.Program + NpmPackages]'때문에 이 유형은 올바르게 역 직렬화하기 위해 JSON 배열 (예 : [1,2,3])이 필요합니다. 이 오류를 수정하려면 JSON 배열을 JSON 배열 (예 : [1,2,3])로 변경하거나 deserialized 형식을 일반 .NET 유형 (예 : 정수와 같은 기본 유형이 아니라 콜렉션 유형 JSON 객체에서 역 직렬화 할 수있는 배열 또는 목록). JsonObjectAttribute를 유형에 추가하여 강제로 JSON 객체에서 역 직렬화 할 수도 있습니다. 경로 '항목', 2 줄, 위치 11입니다.

내 목표를 달성하기 위해 제안 사항을 업데이트하십시오.

+1

신고서에 오류가 있습니다. 유효한 클래스를 얻으려면 복제본의 단계를 따르십시오. –

답변

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