包含标记接口的字符串的反序列化

时间:2017-08-14 13:22:29

标签: c# json serialization deserialization

我正在尝试新的东西来测试使用标记接口的对象序列化。

我知道在现实世界中,如果我遵循正确的编码标准,这将不是正确的方案。但只是为了好奇学习一些工作来实现生成对象的反序列化。

我有以下界面和类:

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 }]}

是否有任何解决方法可以实现这种反序列化?

0 个答案:

没有答案
相关问题