Каков правильный способ использования JSON.NET для анализа streamа объектов JSON?

У меня есть stream объектов JSON, который выглядит примерно так:

{...}{...}{...}{...}... 

Таким образом, в основном объединенный список объектов JSON без разделителя. Каким образом можно десериализовать их в IEnumerable с помощью JSON.NET? На данный момент я попробовал что-то вроде

 var serializer = new JsonSerializer(); serializer.CheckAdditionalContent = false; using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { reader.SupportMultipleContent = true; reader.Read(); while (reader.TokenType != JsonToken.None) { yield return serializer.Deserialize(reader); } } 

Но это не с

 Newtonsoft.Json.JsonSerializationException: Unexpected token while deserializing object: EndObject. Path '', line 1, position 55. at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader) 

Очевидно, мне нужно переместить читателя после вызова Deserialize , но как мне это сделать?

Я думаю, если вы немного измените свою петлю, все должно работать:

 public IEnumerable ReadJson(Stream stream) { var serializer = new JsonSerializer(); using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { jsonReader.SupportMultipleContent = true; while (jsonReader.Read()) { yield return serializer.Deserialize(jsonReader); } } } 

Обратите внимание, что вы должны перебирать IEnumerable пока Stream переданный этому методу, открыт:

 using (var stream = /* some stream */) { IEnumerable result = ReadJson(stream); foreach (var item in result) { Console.WriteLine(item.MyProperty); } } 

Пример: https://dotnetfiddle.net/Y2FLuK

  • Преобразовать Newtonsoft.Json.Linq.JArray в список определенного типа объекта
  • Удаление десериализации JSON в объект с помощью Json.NET
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Ошибка JSON.NET Локальный цикл привязки для типа
  • Ошибка десериализации Newtonsoft JSON.net, где поля в порядке изменения JSON
  • Интерфейсы для десериализации в JSON.NET
  • Сериализация нескольких свойств DateTime в одном classе с использованием разных форматов для каждого из них
  • Хранить корпус при сериализации словарей
  • Как я могу получить список ключей от Json.NET?
  • json.net: указать конвертер для ключей словаря
  • Json.NET Отключить десериализацию в DateTime
  • Interesting Posts

    IIS: тайм-аут ожидания и рециркуляция

    Как читать / писать логическое значение при реализации интерфейса Parcelable?

    Как сортировать элементы DOM при выборе в jQuery?

    Инструмент отладки Windows выделяет неправильную область

    Как установить интервал между ячейками и UICollectionView – отношение UICollectionViewFlowLayout?

    Теневая и вложенная функция

    Ошибка запуска сервера MySql «Сервер завершает работу без обновления PID-файла»

    Учебник для тех, кто знает Vim, но хочет также изучить Emacs

    ПК в качестве динамиков Bluetooth

    Увеличьте количество «наиболее используемых» приложений в Windows 10

    Как скопировать / создать экземпляр производного classа из указателя в полиморфный базовый class?

    Как читать один символ с консоли в Java (как пользователь вводит его)?

    В чем разница между Event Listeners & Handlers в Java?

    Анализ журналов gc

    Почему не удается выполнить итерацию карт в порядке ввода?

    Давайте будем гением компьютера.