2015-05-21 35 views
0

我创建了一个名为RESTObjectBase的类。此课程由任何其他类别继承,包括个人,地址,电话号码等信息。反序列化复杂JSON包含继承对象类型的数组

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

即返回JSON如下:

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

我想在另一端反序列化这一点。我有多个错误,包括“类型不能为空”,但这不是我的问题。

有什么方法可以将这种复杂性的对象反序列化到原始类/列表。为什么我很挣扎?它是最终继承RESTObjectBase的一组对象,它看起来并不像反序列化足够聪明。

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

我甚至会很乐意解构JSON并序列化数组中的每个项目,但我无法弄清楚如何做到这一点。我可以使用该类型来解决如何反序列化它。

任何帮助,将不胜感激。

+0

你在使用什么串行器? “__type”参数的存在表明它是“DataContractJsonSerializer”或“JavaScriptSerializer”。 – dbc

+0

查看VS中的“粘贴JSON作为类”功能。 http://blogs.msdn.com/b/webdev/archive/2012/12/18/paste-json-as-classes-in-asp-net-and-web-tools-2012-2-rc.aspx – Jeremy

+0

谢谢。这两件事让我回到了正确的道路上。那和2个小时的睡眠:)。 –

回答

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。

相关问题