使用ASP.Net 4.5 JavaScriptSerializer类,是否可以将JSON字符串直接反序列化为通用列表派生类?
例如,如果我有以下内容,则可以...
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);
但是,如果我希望通过派生MyClass
得到List<MyClass>
的集合(以便该类可以包含处理数据的函数)并执行以下操作...
public class MyClasses : List<MyClass> { ... }
然后我无法让它反序列化......
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 :(得分:0)
你可以使用Newtonsoft.Json
:
string json = "[{\"Id\":1},{\"Id\":2}]";
var myList = JsonConvert.DeserializeObject<List<MyClass>>(json);