Что JSON не является массивом Foo
JSON. Код JsonConvert.DeserializeObject
будет разбирать строку JSON от корня вверх, а ваш тип T
должен точно соответствовать этой структуре JSON. Синтаксический анализатор не собирается гадать , член JSON должен представлять List
, который вы ищете.
Вам нужен корневой объект, представляющий JSON из корневой элемент.
Вы можете легко позволить классам делать это, создаваемое из образца JSON. Для этого скопируйте свой JSON и нажмите Edit -> Paste Special -> Paste JSON As Classes
в Visual Studio.
В качестве альтернативы вы можете сделать то же самое на http://json2csharp.com , который генерирует больше или меньше тех же классов.
Вы увидите, что коллекция фактически является одним элементом глубже, чем ожидалось:
public class Foo
{
public string bar { get; set; }
}
public class RootObject
{
public List foo { get; set; }
}
Теперь вы можете десериализовать JSON из корня (и быть уверенным переименовать RootObject
в нечто полезное):
var rootObject = JsonConvert.DeserializeObject(jsonString);
И получить доступ к коллекции:
foreach (var foo in rootObject.foo)
{
// foo is a `Foo`
}
Вы всегда можете переименовать свойства, чтобы следовать за своим соглашением об обсадке, и применить JsonProperty
:
public class Foo
{
[JsonProperty("bar")]
public string Bar { get; set; }
}
Также убедитесь, что JSON содержит достаточно данных образца. Парсер класса должен угадать соответствующий тип C # на основе содержимого, содержащегося в JSON.
См. Apache Javaflow http://commons.apache.org/sandbox/javaflow/
Это единственный пакет продолжения для Java, который активно разрабатывается. Другой, RIFE, я не уверен, в каком состоянии он находится.
Если вы не возражаете против неявных продолжений, Килим - отличный вариант. Он работает, обрабатывая аннотированные методы и генерируя для вас продолжения в байт-коде. Очевидно, что он делает намного больше, поскольку это фреймворк, но если вы хотите (превосходную) производительность поточно-ориентированных продолжений, стоит посмотреть.
Играть! Фреймворк версии 1.2.x также имеет поддержку продолжений , интегрированную с асинхронными http вкусностями.
Обратите внимание, что Продолжения Play 1.2.x работают только со встроенным сервером Netty .
Другая библиотека Матиаса Манна:
Jetty имеет поддержку продолжения . Дальнейшее обсуждение и некоторые примеры можно найти на DZone .
Я не могу посоветовать эффективность или что-то еще, кроме как сказать, что команда Mortbay всегда, похоже, осознает такие проблемы. Скорее всего, где-то на сайте Jetty будет обсуждение компромиссов при реализации.
Если я правильно понимаю, я полагаю, очевидная проблема заключается в раскручивании стека с активными экземплярами закрытия . Я полагаю, что язык с лексической областью видимости теоретически мог бы понять, что дочерний фрейм может создать экземпляр закрытия, идентифицировать те промежуточные фреймы, на которые есть ссылки, а затем он мог бы распределить эти фреймы вместо того, чтобы просто помещать их в стек.
в этом случае компилятор может распределить все кадры или все родительские кадры замыкания, ссылающегося на объект, не связанный глобально.
Я не думаю, что JVM ограничивает закрытие больше, чем реальная машина, это '