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