2016-12-15 53 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