Я получил несколько файлов данных JSON, однако он имеет типы данных BSON, включенные в каждый объект; Кроме того, это действительно большой дамп tojson (миллионы записей).Deserialize json, созданный mongodb, который содержит bson datatypes
Я пытаюсь десериализовать данные и, как ожидалось, не удается.
Файл JSON имеет такие вещи, как:
"someKey" : NumberLong("1234567889"),
Он также имеет ISODate там ...
Есть ли способ справиться с этим с Json.NET? Похоже, что есть некоторые настройки, чтобы использовать пользовательскую функцию, а не встроенный парсер для определенных ключей?
* Обновленный, чтобы включать код для потока + TextReader для очень больших (100GB + файл)
using (StreamReader file = File.OpenText(@"\\largedump.txt"))
using (JsonTextReader reader = new JsonTextReader(file))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
Contacts c = serializer.Deserialize<Contacts>(reader);
Console.WriteLine(c.orgId);
}
}
}
'{ "someKey": NumberLong ("1234567889")}' не является допустимым JSON. См. [Стандарт JSON] (http://www.json.org/). При этом Json.NET поддерживает некоторые расширения стандарта, включая [конструкторы] (https://stackoverflow.com/questions/36958680). Если бы вы могли предварительно обработать ваш JSON до '{" someKey ": new NumberLong (" 1234567889 ")}, вы могли бы его проанализировать с помощью Json.NET – dbc
Yup - его недействительным, поскольку DBA не сбрасывали его со строгим; что было бы лучше, поскольку это представило бы его в json с «$ numberlong», который я уже закодировал для ... и теперь должен корректироваться. Кажется, что id должен захватить строку из читателя, чтобы предварительно обработать его ... – zxed
Думаю, вам может понадобиться какое-то Regex, чтобы вставить 'new' перед' NumberLong' (или просто удалить его полностью), потоковая передача результата в файл temp. – dbc