2015-04-25 40 views
0

我試圖從網站RSS獲取數據將其轉換爲JSON。我得到這個JSON字符串:Array JSON反序列化

http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http%3A%2F%2Frss.tecmundo.com.br%2Ffeed

我用列表來獲取值,但我得到這個錯誤「無法創建抽象類或接口的實例」,我不知道如何解決它。它發生在這一行。

IList<News> content = new IList<News>(); 

這是我的代碼。

public class News 
{ 
    public string author { get; set; } 
    public string title { get; set; } 
    public string content { get; set; } 
    public string contentSnippet { get; set; } 
    public string link { get; set; } 
    public string publishedDate { get; set; } 

    public string[] getFeed(string Website) 
    { 
     string path = @"http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=" + Website; 
     var json = new WebClient().DownloadString(path); 
     JObject jsonObject = JObject.Parse((string)json); 

     IList<JToken> jsonData = jsonObject["responseData"]["feed"]["entries"]["0"].Children().ToList(); 
     IList<News> content = new IList<News>(); 

     foreach(JToken data in jsonData) 
     { 
      News finalData1 = JsonConvert.DeserializeObject<News>(jsonData.ToString()); 
      content.Add(finalData1); 
     } 

     return new string[] { "I must return something here." }; 
    } 
} 

這裏是我使用更好的可視化JSON字符串的工具:http://jsonschema.net/#/

回答

2

你得到的錯誤與JSON無關。這是因爲你正試圖創建一個接口的實例。您可能剛修好,通過給它的具體List<T>類:

IList<News> content = new List<News>(); 

然而,轉換IList<JToken>IList<News>的更簡單的方法可能是再次使用LINQ - 你可以做到這一切在一個步驟很容易:

IList<News> content = jsonObject["responseData"]["feed"]["entries"]["0"] 
    .Children() 
    .Select(token => JsonConvert.DeserializeObject<News>(token.ToString()) 
    .ToList(); 

編譯,但實際上並不想要由於你有數據。 entries是一個數組,所以你可能想要:

JArray array = (JArray) jsonObject["responseData"]["feed"]["entries"]; 
var content = array 
    .Select(token => JsonConvert.DeserializeObject<News>(token.ToString()) 
    .ToList(); 
+0

我正在閱讀我的JSON數組的正確方法嗎?我的意思是使用[「responseData」] [「feed」] [「entries」] [「0」],因爲現在它正在返回我試圖從無效位置讀取數據。 –

+1

@ThadeuFernandes:我認爲'entries'好,但'entries'是一個數組 - 我懷疑你只是想擺脫'[「0」]'和可能的'Children()'調用。將編輯。 –

+0

@ThadeuFernandes:我編輯了一些適用於我的代碼... –

1

您的問題無關的JSON,但與試圖創造這不是一個接口的實例可能在C#中。您需要創建一個實現IList接口的具體類的實例。列表將是一個例子。還有其他的,包括數組。