Есть ли в.NET парсер JSON StreamReader для.NET?

Мне нужно десериализовать из JSON StreamReaderбез создания промежуточных объектов для каждого объекта в этом потоке.

  • JSON.NET вызывается как JsonConvert.DeserializeObject<T>(string json, JsonConverter[] converters)
    1. не принимает StreamReader, а также
    2. создает в памяти весь набор Newtonsoft.Json.* классы для структуры JSON, как показывает профилировщик памяти. Я на самом деле не уверен, что это так, потому что мой JsonConverters _
  • JavaScriptSerializer также не поддерживает StreamS на всех.
    1. И даже недокументированные new JsonSerializer().Deserialize(new JsonTextReader(streamReader))

В нулевом подходе мне нужен парсер JSON в стиле SAX или StAX.

Что я хочу в идеале, это как API

object JsonCooler.DeserializeObject<T>(
  StreamReader jsonStream, Converter[] converters)

который будет десериализовать непосредственно в новый экземпляр класса Tне хранит все свои промежуточные DOM-подобные объекты в памяти.

Существует ли такой десериализатор? Или что мне не хватает на уровне концепции?

2 ответа

Решение

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

https://github.com/ysharplanguage/FastJsonParser

Я все еще занят, чтобы сначала сделать его стабильным, но если вы хотите попробовать реализовать это в форке, прежде чем я получу шанс, этого, надеюсь, будет достаточно, чтобы немного изменить Obj(int external) и Arr (int external)), наряду с добавлением (необязательного) делегата обратного вызова "reviver" в кэш TypeInfo. Это позволит приложению решать, нужно ли / когда следующему объекту "{ ... }" или массиву "[ ... ]" в потоке полностью десериализовать его содержимое или нет.

"НТН,

Я нашел DataReader в LitJSON, но это довольно устарело. Приму любой лучший ответ.

Другие вопросы по тегам