将JSON反序列化为ASP.Net泛型列表派生类

时间:2016-12-15 10:28:25

标签: asp.net json serialization

使用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));

对于更好地处理这个问题,我仍然感激不尽。

1 个答案:

答案 0 :(得分:0)

你可以使用Newtonsoft.Json

这样做
string json = "[{\"Id\":1},{\"Id\":2}]";
var myList = JsonConvert.DeserializeObject<List<MyClass>>(json);