【发布时间】:2016-12-15 10:28:25
【问题描述】:
使用 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);
但如果我想通过从List<MyClass> 派生来收集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));
我仍然会很感激任何关于更好地解决这个问题的想法。
【问题讨论】:
标签: asp.net json serialization