2016-12-15 59 views
0

使用ASP.Net 4.5 JavaScriptSerializer類,是否可以將JSON字符串直接反序列化到通用列表派生類中?將Deserialise JSON轉換爲ASP.Net通用列表派生類

舉例來說,如果我有以下的,它的工作原理...

public class MyClass { 
    public int Id { get; set; } 
} 
string json = "[{\"Id\":1},{\"Id\":2}]"; 
var ser = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var myList = (List<MyClass>)ser.Deserialize<List<MyClass>>(json); 

但是,如果我想從List<MyClass>獲得(以便類可以包含函數在處理向有MyClass集合數據),並執行下列操作...

public class MyClasses : List<MyClass> { ... } 

然後,我不能讓它deserialise ...

var myList = ser.Deserialize<MyClasses>(json); 

正如我得到以下運行時錯誤(代碼沒有編譯)

無法轉換類型的對象「System.Collections.Generic.List`1 [MyClass的]」爲類型「MyClasses」。

如果可能,我想避免外部庫


一個解決方案,我只是想出了是要做到以下幾點,通過給MyClasses一個額外的構造函數,一個List<MyClass>

public class MyClasses : List<MyClass> { 
    public MyClasses() { } 
    public MyClasses(List<MyClass> classes) { 
    foreach(var class in classes) 
     this.Add(class); 
    } 
    ... 
} 

然後傳遞到類的實例...

var myList = new MyClasses(ser.Deserialize<MyClasses>(json)); 

我仍然欣賞一個更好的方法對這個問題有什麼想法。

回答

0

可以使用Newtonsoft.Json像這樣做:

string json = "[{\"Id\":1},{\"Id\":2}]"; 
var myList = JsonConvert.DeserializeObject<List<MyClass>>(json);    
+0

*如果可能,我想避免外部庫* - 你有沒有使用外部庫的答案嗎?它也看起來像你已經完全避免了這個問題的關鍵點,即將其反序列化成MyClasses' – freefaller

+0

是不是MyClass只是一個MyClass的列表? – Mahdi

+0

在我的例子中,是的......但它會有大量處理數據的函數 – freefaller