2016-07-12 3 views
1

머리말 : JSON.NET에 대해 알고 있지만 사용할 수는 없습니다 (클라이언트 컴퓨터).고유하게 명명 된 중첩 JSON 구문 분석

http://api.fixer.io/latest?base=USD에 의해 반환 된 JSON을 3 열, 날짜, 통화 코드 및 요율로 구문 분석해야합니다. 문제는 중첩 된 "요율"부분입니다. 통화 코드는 "key"및 "value"속성을 사용할 수 없다는 것을 의미하는 첫 번째 요소의 이름입니다. 내가 아는 유일한 방법은 각각의 가능한 통화 코드를 하드 코딩하는 것입니다.이 코드는 현재 아래 코드에 나와 있습니다. 키/값 쌍을 사용하여 코드/속도를 동시에 끌어낼 수 있기를 원합니다.

json으로 : 지금까지

{"base":"USD", 
"date":"2016-07-12", 
"rates": { 
    "AUD":1.3101, 
    "BGN":1.7633, 
    "BRL":3.2829, 
    "CAD":1.3029, 
    etc....} 
} 

내 코드 :

내가 돌아 노력하고 무엇
static void Main(string[] args) 
    { 
     var curDate = "2001-01-01"; 
     var URL = @"http://api.fixer.io/" + curDate + "?base=USD"; 
     Console.WriteLine(URL); 
     //WebRequest wrGetURL = WebRequest.Create(URL); 
     var text = ""; 
     //wrGetURL.ContentType = "application/json; charset=utf-8"; 

     HttpWebRequest httpWebRequest = System.Net.WebRequest.Create(URL) as HttpWebRequest; 

     using (HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse) 
     { 
      if (httpWebResponse.StatusCode != HttpStatusCode.OK) 
      { 
       throw new Exception(string.Format("Server error (HTTP {0}: {1}).", 
        httpWebResponse.StatusCode, httpWebResponse.StatusDescription)); 
      } 

      Stream stream = httpWebResponse.GetResponseStream(); 

      DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(JSONRead)); 
      JSONRead objResponse = (JSONRead)dataContractJsonSerializer.ReadObject(stream); 

      Console.WriteLine(objResponse.rates.AUD); 
     } 
     Console.ReadLine(); 

    } 

    [DataContract] 
    public class JSONRead 
    { 
     [DataMember(Name = "date")] 
     public string date { get; set; } 

     [DataMember(Name = "rates")] 
     public Rates rates { get; set; } 

     [DataMember(Name = "base")] 
     public string bases { get; set; } 

    } 

    [DataContract] 
    public class Rates 
    { 
     [DataMember(Name = "AUD")] 
     public string AUD { get; set; } 

     //[DataMember(Name = "key")] 
     //public string key { get; set; } 

     //[DataMember(Name = "value")] 
     //public string value { get; set; } 
    } 

:

Date  Code Rate 
2016-07-12 AUD 1.3101 
2016-07-12 GBN 1.7633 
etc... 
+2

사전으로 요금을 정의하십시오 – Plutonix

+0

@Plutonix는 무지를 용언하지만 코드에서 어떻게 보이나요? 목록을 사용하는 다른 예제를 보았지만 API 호출에서 아무 것도 반환하지 않았습니다. – TTeeple

답변

0

나는 DataContractJsonSerializerSettings을 사용했다 및에 UseSimpleDictionaryFormat 설정 true. 그런 다음 중첩 된 객체를 사전 객체로 올바르게 읽습니다. 도움을 주셔서 감사합니다 @Plutonix.

관련 문제