2014-01-31 40 views
1

我正在轉換使用NewtonSoft.JsonNet編寫的代碼。這實際上是一個自定義Json媒體類型格式化程序。我必須改變它,因爲Json.Net已經證明其負載下的性能非常差。互聯網上的許多比較也證明了這一點。Json反序列化和控制實例化

無論如何,我有一個基本類型,稱爲CatalogueItem。有三種類型來源於此類型,分別稱爲ContainerItem,SectionItemRefresherItem。基於名爲itemType的Json對象中的屬性,我們決定必須實例化哪個子類。

var type = (string)jsonObject.Property("itemType"); 

     switch (type) 
     { 
      case "Container": 
       return new ContainerItem(); 
      case "Section": 
       return new SectionItem(); 
      case "Refresher": 
       return new RefresherItem(); 
     } 

我們使用了創建自定義CustomCreationConverter,並將其添加到Serializer.Converters收集Json.Net.Serializer做到這一點。試圖擺脫Json.Net,我使用​​,但我不知道如何控制使用它生成的類型。任何人都可以幫助我嗎?

p.s.我在StackOverflow中發現了這個帖子,其中類似的問題已經得到解答。但是,我從第三方Web服務獲取json,因此我不能在其中包含類型名稱。另外,我不能使用通用版本JsConfig,因爲MediaTypeFormatter沒有任何通用方法。

+2

即使它沒有幫助你,你能否將你的問題與你提到的其他帖子聯繫起來?這可能有助於他人回答你的問題。 –

回答

1

我建議避免試圖強制您的JSON序列化程序到您的模型,並使用DTO的映射1:1到導線格式比使用普通的C#映射類型的DTO到您想要的域模型。

隨着中說,這取決於什麼JSON和DTO的樣子你可以使用一個:

JsConfig<CatalogueItem>.RawDeserializeFn 
JsConfig<CatalogueItem>.DeSerializeFn 
JsConfig<CatalogueItem>.OnDeserializedFn 

否則,你可以動態使用的JSONObject,here's an example解析JSON。