3

現在、Serilog を使用して CouchDB データベースにログ (ログ アプリケーション) を記録しており、いくつかのタイプがデータベースに分解されています。

LogEvents をデータベースから引き出して元の LogEvents にデシリアライズしようとする別のアプリケーション (レポート アプリケーション) があります。レポート アプリケーションは、ロギング アプリケーションと同じタイプを認識しており、データベース内の特定のタイプは完全に分解されています。

Json.Net のデシリアライザーには、MessageTemplate のデシリアライズに関する問題があります。カスタム コンバーターを使用しても、非常に多くの問題があり、おそらく間違っています (デシリアライズにはさまざまな例外がありますが、実際のパターンはわかりません)。

これを成功させた人はいますか?ログからタイプを引き出すことができるのは Serilog の機能の 1 つであり、すべてのデータがそこにあるという印象を受けていたので、なぜそれができないのかわかりません。

これらのタイプはすべて完全にシリアライズ可能であり、Json.net によって定期的にシリアライズ/デシリアライズされます。

4

1 に答える 1

1

さらに調査した結果、問題を部分的に解決する方法を見つけました。http://json2csharp.com/で新しいクラスを生成します- RootObject の名前を何か (SpecificLogEvent など) に変更し、以下を使用します。

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

次に、必要に応じてオブジェクトを実際のオブジェクトに変換します。簡単に行ったり来たりするのが好きで、冗長なクラスを作成するこの余分なステップを避けたいので、しばらくこれを答えとしてマークしません。

于 2015-10-30T06:06:19.940 に答える