反序列化复杂JSON包含继承对象类型的数组

时间:2015-05-21 15:13:14

标签: c# json serialization

我创建了一个名为RESTObjectBase的类。此类由任意数量的其他类继承,其中包括人员,地址,电话号码等信息。

我创建一个包含一个或多个此类对象的List<RestObjectBase>,并通过REST调用将其传递回前端。

返回的JSON如下:

{
   "Items":[
      {
         "__type":"AnyObjectInheritedFromBaseClass",
         "ObjectType":3,
         "First_Name":"",
         "Last_Name":"",
      }
   ],
   "Status":0
}

我试图在另一端反序化。我有多个错误,包括&#39; type不能为null&#39;但这不是我的问题。

有没有办法将这种复杂性的对象反序列化为原始类/列表。为什么我挣扎的是最终继承RESTObjectBase的一系列对象,并且它看起来不像反序列化那样足够聪明。

前端反序列化可以是任何设备或平台,所以我不能简单地使用像JSON.NET这样的东西,因为它在任何地方都不受支持。

我甚至乐意解构JSON并单独序列化数组中的每个项目,但我也无法弄清楚如何执行此操作。我可以使用该类型来确定如何反序列化它。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

所有关于使用正确的序列化程序。我正在使用DataContractJsonSerializer进行序列化,所以使用反序列化也是如此,它按预期工作。

        RESTResponse rr2 = null;

        using (MemoryStream ms = new MemoryStream())
        {
            var writer = new StreamWriter(ms);
            writer.Write(textBox1.Text);
            writer.Flush();
            ms.Position = 0;

            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(RESTResponse));

            rr2 = (RESTResponse)s.ReadObject(ms);
        }

虽然我计划在移动设备上的许多不同平台上执行此操作,但我计划使用Xamarin,因此我应该能够执行相同的代码。

这也意味着我可以使用JSON.NET。