Десериализовать или проанализировать JSON из NetworkStream с помощью JSON.Net

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

Я буду отправлять много последовательных объектов, когда я получаю данные через NetworkStream, как мне узнать, когда закончился первый документ JSON, чтобы JSON.NET проанализировал документ из полученной строки?

Или, что еще лучше, есть ли способ заставить Json.NET читать непосредственно из NetworkStream и десериализовать / проанализировать полученный документ JSON?

Дайте мне знать с уважением

Альберт


person aattia    schedule 22.07.2010    source источник


Ответы (1)


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

person Darin Dimitrov    schedule 22.07.2010
comment
Я имел в виду без отправки каких-либо специальных маркеров, только объекты JSON. - person aattia; 23.07.2010
comment
Десериализаторам JSON требуется вся строка JSON для успешного выполнения десериализации, поэтому, если вы хотите добиться этого, вам либо нужен маркер, либо подождите, пока будет прочитан весь поток. Вы можете попробовать реализовать некоторые эвристики, такие как подсчет количества открытий { и сопоставление соответствующего закрытия }, чтобы определить, где заканчивается текущий объект, но это может быть непростой задачей, которая работает для любой строки JSON. - person Darin Dimitrov; 23.07.2010
comment
JSON.NET должен делать что-то подобное при чтении из TextStream. Если я анализирую документ JSON из TextStream, не будет маркера, сообщающего JSON.NET, когда документ заканчивается. Итак, так же, как JSON.NET анализирует документ из текстового потока, есть ли способ сделать то же самое для сетевого потока, поскольку оба являются потоками? - person aattia; 23.07.2010