Продолжения в Java

Что JSON не является массивом Foo JSON. Код JsonConvert.DeserializeObject(jsonString) будет разбирать строку 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.

28
задан Mike 21 September 2009 в 18:36
поделиться

6 ответов

См. Apache Javaflow http://commons.apache.org/sandbox/javaflow/

Это единственный пакет продолжения для Java, который активно разрабатывается. Другой, RIFE, я не уверен, в каком состоянии он находится.

13
ответ дан gawi 14 October 2019 в 11:31
поделиться

Если вы не возражаете против неявных продолжений, Килим - отличный вариант. Он работает, обрабатывая аннотированные методы и генерируя для вас продолжения в байт-коде. Очевидно, что он делает намного больше, поскольку это фреймворк, но если вы хотите (превосходную) производительность поточно-ориентированных продолжений, стоит посмотреть.

2
ответ дан ngreen 14 October 2019 в 11:31
поделиться

Играть! Фреймворк версии 1.2.x также имеет поддержку продолжений , интегрированную с асинхронными http вкусностями.

Обратите внимание, что Продолжения Play 1.2.x работают только со встроенным сервером Netty .

И Play 2.x по-прежнему не поддерживает продолжения .

1
ответ дан Community 14 October 2019 в 11:31
поделиться
0
ответ дан Vadzim 14 October 2019 в 11:31
поделиться

Jetty имеет поддержку продолжения . Дальнейшее обсуждение и некоторые примеры можно найти на DZone .

Я не могу посоветовать эффективность или что-то еще, кроме как сказать, что команда Mortbay всегда, похоже, осознает такие проблемы. Скорее всего, где-то на сайте Jetty будет обсуждение компромиссов при реализации.

7
ответ дан 28 November 2019 в 03:34
поделиться

Если я правильно понимаю, я полагаю, очевидная проблема заключается в раскручивании стека с активными экземплярами закрытия . Я полагаю, что язык с лексической областью видимости теоретически мог бы понять, что дочерний фрейм может создать экземпляр закрытия, идентифицировать те промежуточные фреймы, на которые есть ссылки, а затем он мог бы распределить эти фреймы вместо того, чтобы просто помещать их в стек.

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

Резюме

Я не думаю, что JVM ограничивает закрытие больше, чем реальная машина, это '

2
ответ дан 28 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: