2017-03-27 42 views
1

我已经它们经由其余API通信的两个应用程序,经由Json.NETJson.NET类型转换

序列

,我有与经过所述两个应用程序之间的继承结构困难的部分:

ChildClass1 : BaseClass 
ChildClass2 : BaseClass 

我需要能够反序列化已经各自独立地被反序列化到他们的正确的相对型基类的列表:

JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(json) 

我知道Ø F中的TypeNameHandling.All串行设置,但我的问题是,在每个应用程序中的类,在不同的名称空间:

应用1:

App1.NameSpace.ChildClass1 

应用2:

App2.DifferentNameSpace.ChildClass1 

由于对此,它不会自动转换它们。无法更改名称空间或为这些类使用合约库。

我是否需要编写自定义JsonReader?或者是否有一个设置,我可以用它来覆盖序列化/反序列化时的类名,以便我可以删除命名空间?

回答

1

您可以使用您在设置上设置的ISerializationBinder,这些设置允许您指定在序列化期间在JSON中使用的名称以及在反序列化中使用的类型。

这样你就可以完全控制要使用的名称。

可以找到一个例子here

+0

所以这是部分工作,通过使用这种方法我能够删除程序集名称/命名空间。然而,问题在于,它也在json开始时的List 初始类型中混淆了。这是我在json开始进入列表前的所有事情:{“$ type”:“List'1”,“$ values”: – GreatSamps

+0

修复了它。需要将TypeNameHandling.All更改为TypeNameHandling.Object;谢谢你的帮助! – GreatSamps