Есть ли в.NET парсер JSON StreamReader для.NET?
Мне нужно десериализовать из JSON StreamReader
без создания промежуточных объектов для каждого объекта в этом потоке.
- JSON.NET вызывается как
JsonConvert.DeserializeObject<T>(string json, JsonConverter[] converters)
- не принимает
StreamReader
, а также - создает в памяти весь набор
Newtonsoft.Json.*
классы для структуры JSON, как показывает профилировщик памяти. Я на самом деле не уверен, что это так, потому что мойJsonConverter
s _
- не принимает
- JavaScriptSerializer также не поддерживает
Stream
S на всех.- И даже недокументированные
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. Это позволит приложению решать, нужно ли / когда следующему объекту "{ ... }" или массиву "[ ... ]" в потоке полностью десериализовать его содержимое или нет.
"НТН,