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));
我仍然欣賞一個更好的方法對這個問題有什麼想法。
*如果可能,我想避免外部庫* - 你有沒有使用外部庫的答案嗎?它也看起來像你已經完全避免了這個問題的關鍵點,即將其反序列化成MyClasses' – freefaller
是不是MyClass只是一個MyClass的列表? – Mahdi
在我的例子中,是的......但它會有大量處理數據的函數 – freefaller