2013-07-18 3 views
1

Я пытаюсь проанализировать структуру JSON с помощью JSON.NET. Все свойства первого уровня десериализуются правильно.Проанализируйте рекурсивно неизвестную структуру JSON с помощью JSON.NET

У меня есть проблема десериализации словаря. Тип объекта может быть любым: строка, double, int, bool, List, Dictionary и рекурсивно.

Пример JSON:

{ 
    "id":"56d4f8sd4f86ds4f", 
    "name":"Azerty", 
    "dynProp": { 
     "xp":100, 
     "life":100, 
     "bonus": { 
      "force": 100, 
      "defense": 100 
     }, 
     "ennemies": { 
      "beast": { 
       "wolf": 100, 
       "bear": 20 
      } 
     } 
    } 
} 

Все Данные в узле dynProp динамична, и я не могу знать тип объекта, глубину или что-нибудь.

вывода для объекта dynProp что-то вроде этого:

{{"dynProp","{xp:100, life: 100, bonus: {...}, ...}"}} 

В самом деле, JSON.NET положить в стоимости объекта в jobject и не на все колбы словари и тому подобные.

Я пытаюсь добавить настройки Serialization так:

new JsonSerializerSettings 
    { 
     TypeNameHandling = TypeNameHandling.All, 
     TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple 
    } 

Но без успеха ...

Заранее спасибо за вашу помощь!

Редактировать: Я открыт для другой структуры, но она должна работать на .net 2.0.

ответ

0

Я знаю, что этот вопрос явно касается JSON.NET, но в надежде, что вы не знаете об огромной библиотеке ServiceStack, я бы хотел добавить рекомендацию, чтобы вы перешли к этому вопросу. В частности, пространство имен ServiceStack.Text имеет сериализатор JSON, который равен much faster than JSON.NET's serializer.

Кроме того, у них есть метод JSONObject.Parse, который лучше всего обрабатывает ваш прецедент (я считаю). Смотрите этот стека переполнения пост, который в значительной степени соответствует тому, что вы ищете:

ServiceStack.Text.JsonObject.Parse vs. NewtonSoft.Json.Linq.JObject.Parse for nested tree of 'dynamic' instances?

+0

ServiceStack работает на .NET 2.0? –

+0

Извините! Я не знал, что вы на 2.0, ServiceStack делает 3.5+ в соответствии с их сайтом. :( – welegan

+0

Нет проблем. Я не говорю об этом. Это моя вина!;) –

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