我正在尝试新的东西来测试使用标记接口的对象序列化。
我知道在现实世界中,如果我遵循正确的编码标准,这将不是正确的方案。但只是为了好奇学习一些工作来实现生成对象的反序列化。
我有以下界面和类:
interface intA {}
class classa : intA
{
public int a { get; set; }
public int b { get; set; }
}
class classb : intA
{
public string c { get; set; }
public string d { get; set; }
public int e { get; set; }
}
class classsd
{
public List<intA> obj { get; set; }
}
我在主方法中使用&#39; Newtonsoft.json&#39;编写了以下序列化和反序列化代码。
classsd objd = new classsd();
objd.obj = new List<intA>();
objd.obj.Add(new classa() { a = 1, b = 2 });
objd.obj.Add(new classb() { c = "asd", d = "qwe", e = 1 });
var a = JsonConvert.SerializeObject(objd);
string json = @"{'obj':[{'a':1,'b':2},{'c':'asd','d':'qwe','e':1}]}";
var temp = JsonConvert.DeserializeObject<classsd>(a);
我得到了正确的序列化字符串,但是当我尝试反序列化时,会抛出异常:
Newtonsoft.Json.JsonSerializationException:&#39;无法创建ConsoleApp1.intA类型的实例。 Type是接口或抽象类,无法实例化。&#39; ...
序列化字符串如下:
{'obj': [{'a': 1, 'b': 2}, {'c': 'asd', 'd': 'qwe', 'e': 1 }]}
是否有任何解决方法可以实现这种反序列化?