2016-06-22 7 views
1

나는 인구 조사 자료에 일하고 내 JSON에 대한 URL이 알려져 있지에서 반환 데이터 세트 때역 직렬화 JSON은

http://api.census.gov/data.json

을 위의 JSON에서 나는의 드롭 다운을 구축하고자 " title "여기서"c_dataset "에는"acs5 "가 있습니다. 이제 다음과 같이 내 MVC 컨트롤러의 코드는 다음과 같습니다

var yourObject = new JavaScriptSerializer().Deserialize<dynamic>(result.ToString()); 

      foreach (KeyValuePair<string, object> currency in yourObject) 
      { 
       if (currency.Key == "dataset") 
       { 
        foreach (KeyValuePair<string, object> cur in currency.Value) 
        { 

        } 
       } 
      } 

내부 대부분의 foreach는 나에게 '객체'에 대한 공공의 정의가 포함되어 있지 않기 때문에 foreach 문은 변수 유형 '객체'에 작동 할 수 없습니다 "라는 오류를 제공합니다 'GetEnumerator'!!이 json 큰 있기 때문에 특정 클래스의 개체를 deserialize 할 수 없습니다.이 작업을 수행하는 가장 좋은 방법은 수 있습니다. 또한 LINQ deserialize 개체를 쿼리 할 수 ​​있습니다 궁금 해서요. 사전에 감사드립니다.

+0

448kb는별로 크지 않습니다. 특정 유형으로 비 직렬화하려고하면 어떻게됩니까? – JLRishe

+0

@JLRishe 저는 클래스를 만들려는 커다란 구조입니다. 단지 그것을 역 직렬화하여 드롭 다운을 만들길 원합니다. 우리는 어떻게 구체적인 유형으로 탈 직렬화 할 수 있습니까? – DharaPPatel

답변

1

JSON 디시리얼라이저는 추가로 "노이즈"를 무시하고 지정한 속성 만 읽습니다. 원하는 모든 속성은 무시하고 원하는 속성 만 가진 구체적인 유형을 작성하는 것이 가장 좋습니다. .

// not tested 
class CensusDataSet 
{ 
    [JsonProperty("c_dataset")] 
    public string[] CDataset { get; set; } 

    [JsonProperty("title")] 
    public string Title { get; set; } 
} 

class CensusData 
{ 

    [JsonProperty("dataset")] 
    public CensusDataSet[] DataSets { get; set; } 
} 

... 
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<CensusData>(content); 

foreach (var dataSet in data.DataSets) ... 

BTW, 당신의 제목은 오해의 소지가 : 드 직렬화라고 당신이 뭘 하려는지.

+0

와우, 이거 정말 대단해, ​​나에게 최선이야! 나는이 방법을 몰랐다. 이 솔루션에 감사드립니다. – DharaPPatel

+0

또한 CensusDataSet에 추가 할 수 있도록 AccessURL을 추가하려고했지만 deserialization에서 null이 나타납니다. 그 이유는 무엇일까요? – DharaPPatel

+1

accessURL은 CensusDataSet의 속성이 아니기 때문입니다. 그것은 레코드의 배열 인 속성 "distribution"내부에서 살아 간다. 유형에서이 계층 구조를 모방해야하며, 디시리얼라이저가 자신을 위해 알아낼 것으로 기대할 수는 없습니다. 클래스 배포 {public string AccessUrl {get; 세트; }}', 그리고 나서'CensusDataSet'에'Distribution [] Distributions' 필드를 추가하십시오. 적절한'JsonProperty (name)'속성을 잊지 마라. 이 작업을 완료하면 accessURL을 dataSet.Distributions [0] .AccessUrl로 가져옵니다. –