2011-01-26 3 views
0

난 그냥 직장이 deserilization을 얻을 수 없습니다. 오류는 발생하지 않지만 artistName은 비어 있습니다.C# json deserialization itunes 검색 api

아무도 도와 줄 수 있습니까?

JSON 문자열 :

{ "RESULTCOUNT": 1, "결과"[ { "wrapperType": "트랙", "종류": "노래", "ArtistID 순"414401 " "collectionId": 6666512, "trackId": 6666508, "artistName": "Autopilot Off", "collectionName": "소리 만들기", "trackName": "Byron Black", "collectionCensoredName" ...] "

은 는 HttpWebRequest를 WebRequest 클래스

,

void StartWebRequest(string itunesUrl) 
    { 
     webRequest = (HttpWebRequest)WebRequest.Create(itunesUrl); 
     webRequest.Method = "GET"; 
     webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null); 

    } 

    void FinishWebRequest(IAsyncResult result) 
    { 

     StreamReader sr = new StreamReader(webRequest.EndGetResponse(result).GetResponseStream()); 
     string json = sr.ReadToEnd(); 

     Log.debugToVS("json: " + json); 


     iTunesResult itunesObj = new iTunesResult(); 

     itunesObj = JSONHelper.Deserialise<iTunesResult>(json); 

     Log.debugToVS("artistId: " + itunesObj.artistName); 

    } 

    public void iTunesSearch(string artist, string album, string title) 
    { 

     if(artist == "" && album == "" && title == "") return; 

     string query = "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?"; 

     query += "term=" + HttpUtility.UrlEncode(artist + " " + album + " " + title); 

     query += "&media=music"; 
     query += "&limit=20"; 

     Log.debugToVS("url: " + query); 

     StartWebRequest(query); 
    } 

} 

public class JSONHelper 
{ 
    public static T Deserialise<T>(string json) 
    { 
     T obj = Activator.CreateInstance<T>(); 

     MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); 

      DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); 
      obj = (T)serializer.ReadObject(ms); // <== Your missing line 



      return obj; 

    } 
} 

[DataContract] 
public class iTunesResult 
{ 
    [DataMember] 
    public string artistName { get; set; } 
} 

답변

0

내가 생각하는이 데이터 계약에 문제가 있습니다. Json을 보면 데이터 계약은 이와 같아야합니다.

[DataContract] 
public class iTunesResult 
{ 
    [DataMember] 
    public iTuneJsonResults[] results { get; set; } 
} 


[DataContract] 
public class iTuneJsonResults 
{ 
    [DataMember] 
    public string artistName { get; set; } 
} 

및 FinishWebrequest에서 Log.xxxx 해당 회선이 될해야합니다

foreach(var item in itunesObj.results) 
    Log.debugToVS("artistId: " + item.artistName);