Как получить подробную информацию о позиции из JsonTextReader

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

Информация о том, где находится JSON и двоичные данные, не предоставляется.

Итак, один из способов справиться с этим — просто просмотреть файл, и каждый раз, когда я сталкиваюсь с {, я пытаюсь разобрать объект json из этой точки. Если мне это удастся, я бы сохранил проанализированный объект и продолжил, в противном случае я рассматриваю двоичные данные { и добавляю их в очередь аудио.

Я обычно использую JSON.Net для своих материалов JSON. Если я использую JsonTextReader в своем входном потоке, я могу проанализировать свою позицию в массиве и получить то, что мне нужно. Затем я снова начал бы чтение с байта после закрытия }

Однако JsonTextReader будет читать большими порциями за раз. Поэтому, когда я проверяю свою позицию базового потока, его позиция находится далеко за пределами закрытия }. JsonTextReader не имеет никаких свойств, касающихся его положения, кроме свойств Line и Char, которые было бы неудобно использовать. Однако есть закрытый член _charPos, который предоставит мне именно то, что я хочу.

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


person whatsisname    schedule 01.11.2018    source источник
comment
Не могли бы вы вставить строку json в качестве примера и какую информацию вам нужно извлечь? Нет необходимости в полной строке json, просто выдержка   -  person Rui Jarimba    schedule 01.11.2018
comment
Это раздражает, не так ли? IJsonLineInfo похож на IXmlLineInfo в том, что он дает номер строки и позицию, но не индекс символов, который был бы менее удобочитаемым, но более полезным на практике. Кстати, _charPos - это не то, что вам нужно, это индекс в буфере _chars.   -  person dbc    schedule 01.11.2018
comment
@RuiJarimba: настоящий JSON на самом деле не важен, так как он довольно обычный. Проблема в том, что он перемежается с бинарными данными, отличными от json.   -  person whatsisname    schedule 01.11.2018
comment
@dbc: вы правы, _charPos работает только в том случае, если весь объект меньше размера чтения JsonTextReader. Что усугубляет мою проблему.   -  person whatsisname    schedule 02.11.2018