Как десериализовать LogEvents из Serilog, хранящегося в CouchDB

В настоящее время я веду журнал (приложение ведения журнала) в базе данных CouchDB с помощью Serilog, и несколько типов декомпозируются в базу данных.

У меня есть отдельное приложение (приложение для создания отчетов), которое пытается извлечь LogEvents из базы данных и десериализовать их в исходные LogEvents. Приложение отчетов так же осведомлено о тех же типах, что и приложение ведения журнала, и определенные типы в базе данных полностью разложены на него.

У десериализатора Json.Net есть проблемы с десериализацией MessageTemplate. Даже с настраиваемым конвертером у него так много проблем, что я, вероятно, делаю это неправильно (десериализация различных исключений, но никакой реальной закономерности, которую я могу сказать).

Кто-нибудь смог это сделать успешно? У меня создалось впечатление, что возможность извлекать типы из журналов - одна из особенностей Serilog, и все данные там есть, поэтому я не понимаю, почему это невозможно.

Все эти типы также полностью сериализуемы, они регулярно сериализуются / десериализуются Json.net.


person Chad Jessup    schedule 30.10.2015    source источник


Ответы (1)


После дополнительных исследований я нашел способ частично решить проблему. Создайте новые классы с помощью http://json2csharp.com/ - переименуйте RootObject во что-нибудь (например, SpecificLogEvent) и используйте:

var logEvent = JsonConvert.DeserializeObject<SpecificLogEvent>(doc.Value);

Затем преобразуйте объекты в реальные, где это необходимо. Я не буду отмечать это как ответ какое-то время, потому что мне хотелось бы легко двигаться вперед и назад и избегать этого дополнительного шага, который создает избыточные классы.

person Chad Jessup    schedule 30.10.2015