2015-05-16 93 views
1

我想構建一個使用JSON REST Web服務的vb.net應用程序。下面,我調用此服務時,接收數據的一個例子:將沒有根對象的json反序列化到c#/ vb.net類

[ 
{"id":17552,"title":"Avatar","alternative_title":null,"year":2009}, 
{"id":31586,"title":"Avatar","alternative_title":"Cyber Wars","year":2004}, 
{"id":81644,"title":"Aliens vs. Avatars","alternative_title":null,"year":2011} 
] 

我試圖像json2csharp一些工具來生成這個例子中的一類,但這些工具生成這樣一個類:

public class RootObject 
{ 
public int id { get; set; } 
public string title { get; set; } 
public string alternative_title { get; set; } 
public int year { get; set; } 
} 

該類忽略了從服務返回列表的事實。我認爲這是由於json輸出不以根級別對象開始的事實造成的。

我的c#/ vb.net類看起來像這個JSON輸出或應該「手動」解析?

回答

1

您可以使用Json.Net,和反序列化數組:

var result = JsonConvert.DeserializeObject<RootObject[]>(json_string); 
+0

下一個答案是最詳盡的,但這個答案是第一:-)謝謝! – Mark

2

我不確定這個問題到底是什麼。使用Newtonsoft Json.NET,JsonConvert.DeserializeObject<IEnumerable<RootObject>>(input),即這樣的:

var s = "[{\"id\":17552,\"title\":\"Avatar\",\"alternative_title\":null,\"year\":2009}," + 
     "{\"id\":31586,\"title\":\"Avatar\",\"alternative_title\":\"Cyber Wars\",\"year\":2004}," + 
     "{\"id\":81644,\"title\":\"Aliens vs. Avatars\",\"alternative_title\":null,\"year\":2011}]"; 

var result = JsonConvert.DeserializeObject<IEnumerable<RootObject>>(s); 
foreach (var r in result) 
    Console.WriteLine("{0} - {1}, {2} ({3})", r.id, r.title, r.alternative_title, r.year); 

產生以下輸出對我來說:

17552 - Avatar, (2009) 
31586 - Avatar, Cyber Wars (2004) 
81644 - Aliens vs. Avatars, (2011)