2016-10-20 35 views
-2

我無法反序列化某個json我正在收集一個網站。將C#中的JSON反序列化爲數組

{ 
    "query": { 
    "search": [ 
     { 
     "ns": 0, 
     "title": "test", 
     "snippet": "test" 
     }, 
     { 
     "ns": 0, 
     "title": "test2", 
     "snippet": "test2" 
     }, 
     { 
     "ns": 0, 
     "title": "test3", 
     "snippet": "test3" 
     }, 
     { 
     "ns": 0, 
     "title": "test4", 
     "snippet": "test4" 
     } 
    ] 
    } 
} 

這是我嘗試反序列化到類:

private void DesURL_Click(object sender, RoutedEventArgs e) 
    { 
     string url = @"https://pt.wikipedia.org/w/api.php....."; 

     var json = new WebClient().DownloadString(url); 

     var listaURL = JsonConvert.DeserializeObject<List<Query>>(json); 

    } 

試圖運行錯誤的代碼,這應該JSON進行反序列化到一個數組時。 Ai嘗試utiilizar JArray我需要做反序列化的方法,然後才能變成數組。

目標是將標題和片段轉換爲字符串以從中提取信息。

+3

那麼你的'Query'類是什麼樣子? – DavidG

回答

1

臨提示您:選擇您的JSON並將其複製到剪貼板。現在轉到Visual Studio並在編輯菜單上,粘貼特殊然後粘貼JSON作爲類。這將使你:

public class Rootobject 
{ 
    public Query query { get; set; } 
} 

public class Query 
{ 
    public Search[] search { get; set; } 
} 

public class Search 
{ 
    public int ns { get; set; } 
    public string title { get; set; } 
    public string snippet { get; set; } 
} 

現在你可以deserialise這樣的:

var listaURL = JsonConvert.DeserializeObject<Rootobject>(json); 
1

您需要以下類:

public class Rootobject 
{ 
    public Query query { get; set; } 
} 

public class Query 
{ 
    public Search[] search { get; set; } 
} 

public class Search 
{ 
    public int ns { get; set; } 
    public string title { get; set; } 
    public string snippet { get; set; } 
} 

然後你就可以反序列化這樣的:

var listUrl = JsonConvert.DeserializeObject<Rootobject>(json); 
0

您的JSON是不是一個數組。它包含一個具有search屬性的query對象,該屬性具有數組值。

所以,你的類必須是這個樣子

public class ResponseDto { 
    public QueryDto Query {get; set;} 
} 
public class QueryDto { 
    public IEnumerable<Query> Search {get; set;} 
} 

var data = JsonConvert.DeserializeObject<QueryDto>(json); 
var list = data.Query.Search.ToList();