2017-03-27 79 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