2012-11-17 20 views
6



मेरे कोड ठीक जब बुला बाकी यूआरएल काम करता है:
http://api.feedzilla.com/v1/categories.jsonASP.NET वेब एपीआई कास्टिंग http प्रतिक्रिया

लेकिन जब मैं यूआरएल निम्न कॉल मैं त्रुटि:
http://api.feedzilla.com/v1/categories/15/articles.json?count=36&since=2012-11-15&client_source=&order=relevance&title_only=0&

त्रुटि:

{"Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.IEnumerable`1[Nitin.News.DAL.Resources.Article]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.\r\nTo fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.\r\nPath 'articles', line 1, position 12."} 

मेरा कोड इस प्रकार है:

public class Article 
    { 
     public string publish_date { get; set; } 
     public string source { get; set; } 
     public string source_url { get; set; } 
     public string summary { get; set; } 
     public string title { get; set; } 
     public string url { get; set; } 
    } 
    public IEnumerable<Article> Get() 
    { 
     HttpClient client = new HttpClient(); 
     client.BaseAddress = new Uri("http://api.feedzilla.com/v1/"); 

     //Add an Accept header for JSON format. 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     // call the REST method 
     HttpResponseMessage response = client.GetAsync("http://api.feedzilla.com/v1/categories/2/articles.json??count=36&since=2012-11-15&client_source=&order=relevance&title_only=0&").Result; // Blocking call! 
     if (response.IsSuccessStatusCode) 
     { 
      // Parse the response body. Blocking! 
      return response.Content.ReadAsAsync<IEnumerable<Article>>().Result; 

      //wont work 
      //string JSON =response.Content.ReadAsStringAsync().Result; 
      //return JsonConvert.DeserializeObject<IEnumerable<T>>(JSON); 
     } 
     else 
     { 
      throw new Exception(string.Format("Data access faild,{0} ({1}) method:{2}", (int)response.StatusCode, response.ReasonPhrase, MethodURL)); 
     } 
    } 

उत्तर

14

आपको अपने ऑब्जेक्ट पदानुक्रम में एक और स्तर की आवश्यकता है ... यानी IENumerable रखने की जड़।

public class Enclosure 
{ 
    public int length { get; set; } 
    public string media_type { get; set; } 
    public string uri { get; set; } 
} 

public class Article 
{ 
    public string author { get; set; } 
    public string publish_date { get; set; } 
    public string source { get; set; } 
    public string source_url { get; set; } 
    public string summary { get; set; } 
    public string title { get; set; } 
    public string url { get; set; } 
    public List<Enclosure> enclosures { get; set; } 
} 

public class RootObject 
{ 
    public List<Article> articles { get; set; } 
    public string description { get; set; } 
    public string syndication_url { get; set; } 
    public string title { get; set; } 
} 

तुम बस तो यह करने के लिए अपने कोड को बदलने की जरूरत:

// Parse the response body. Blocking! 
return response.Content.ReadAsAsync<RootObject>().Result.articles; 

जाहिर है कोई भी ऐसे गुण न निकाल देते

http://json2csharp.com/ पर उपकरण में JSON Runing निम्न प्रॉक्सी वर्गों उत्पन्न करता है जरुरत। बस सोचा कि मैं उन्हें ब्याज से बाहर दिखाऊंगा।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन दुर्भाग्य से मुझे एक ही त्रुटि संदेश मिल रहा है। –

+0

@NitinJS इसे सुनकर खेद है। मैंने कोड का परीक्षण किया था और इसे हल करने में आपकी त्रुटि होने से चला गया था। यदि आप चाहें तो मैं पूर्ण कार्य परियोजना अपलोड कर सकता हूं? क्या आपने कोड की इस पंक्ति को बदल दिया? esponse.Content.ReadAsAsync ()? –

+0

हाय, धन्यवाद, आपका कोड काम करता है: डी ने 'IENumerable ' से 'T' –

संबंधित मुद्दे