У меня есть строка JSON, которая содержит сложный, вложенный объект и, вероятно, изменит схему в будущем. Я хотел бы передать его веб-API для сериализации в конвейере согласования контента по мере необходимости.
Есть ли простой способ сделать это? Я читал другие ответы на SO, но они обсуждают только случаи, когда вы заранее знаете схему, которую хотите (например, десериализовать с помощью JsonConvert.DeserializeAnonymousType
), или когда вы знаете глубину вложенности, до которой вы хотите десериализоваться.
Так, например, скажем, у меня есть следующая строка:
@"{
name: "Dan"
children: [
{
name: 'Fred',
},
{
name: 'Fannie',
age: 30,
children: {
own: [
{name: "Barney"},
{name: "Angela"}
],
adopted: {
{name: "Sven"}
}
}
}
}"
Я не знаю, какова его схема, и она может измениться в любое время, я просто хочу иметь возможность отправлять ее через веб-API с надлежащим согласованием содержимого.
Я могу сделать JObject.Parse(...)
, но веб-API не может правильно обрабатывать JObject
. Он будет правильно обрабатывать словари, но я не могу понять, как использовать JSON.Net для десериализации словарей произвольной глубины вложенности.
JObject.Parse(json)
, который возвращает проанализированный JObject (который также реализует IDictonary). Но я не понимаю, как вы хотите получить из него свойства, ничего об этом не зная. - person L.B   schedule 30.08.2014JObject
- person George Mauer   schedule 30.08.2014Dictionary<TKey,TValue>
не сериализуем. Вы можете реализовать свой собственный сериализуемый словарь, и это уже сделал кто-то другой: weblogs.asp.net/pwelter34/ 444961 Используя это, вы могли бы просто вложить объекты SerializableDictionary внутрь значения SerializableDictionary? - person Nick   schedule 30.08.2014Dictionary<TKey,TValue>
можно сериализовать с помощью Json.Net - person L.B   schedule 30.08.2014JObject
, но тогда веб-API задыхается во время согласования содержимого, когда запрашивается xml. Не саркастически, я просто не понимаю, где люди сбиты с толку - разве это не просто базовые вещи для обсуждения контента? - person George Mauer   schedule 30.08.2014DeserializeAnonymousType
на самом деле не делает то, что кажется - вам все равно нужно предоставить тип шаблона для того, как именно все должно быть десериализовано. Если бы я мог преобразоватьJObject
в анонимный тип, это сработало бы отлично. - person George Mauer   schedule 30.08.2014