2014-01-31 3 views
1

Я конвертирую код, который был написан с использованием NewtonSoft.JsonNet. На самом деле это обычное форматирование типа Json Media. Я должен изменить его, потому что Json.Net доказал, что его производительность очень низка при загрузке. Это также доказывает многое сравнение с Интернетом.Json Deserialization и управление экземпляром

В любом случае, у меня есть базовый тип: CatalogueItem. Три типа получены из этого типа и называются ContainerItem, SectionItem и RefresherItem. Основываясь на свойстве объекта Json, который называется itemType, мы решаем, какой подкласс должен быть создан.

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, я использую ServiceStack.Text, но я не знаю, как я могу управлять типом, который создается с его помощью. Может ли кто-нибудь помочь мне в этом?

p.s. Я нашел этот пост в StackOverflow, на который была получена подобная проблема. Однако я получаю json от стороннего веб-сервиса, поэтому я не могу включать в него имена типов. Кроме того, я не могу использовать общую версию JsConfig, потому что MediaTypeFormatter не имеет каких-либо общих методов.

+2

Даже если это вам не помогло, можете ли вы связать свой вопрос с другими сообщениями, которые вы упомянули, на которые вы смотрели? Это может помочь другим ответить на ваш вопрос. –

ответ

1

Я рекомендую не пытаться принудить ваш JSON-сериализатор к вашим моделям и просто использовать карту DTO 1: 1 в формате проводов, чем использовать обычный C# для сопоставления типизированных DTO с желаемыми моделями домена.

С учетом сказанного, в зависимости от того, что взгляд DTO как вас JSON и может быть в состоянии использовать один из:

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

В противном случае вы можете разобрать JSON динамически с помощью JSONObject, here's an example.

Смежные вопросы