###前提・実現したいこと
- 実現したいこと
ある構造化されたエラーログを、順序が決まったJSON形式で出力したいです。
JSON出力はJsonConvert.SerializeObject()を使えば良いのですが、元となるデータの作り方で悩んでいます。
- 前提
エラーログは発生エラーに応じて項目が増減する。
項目の順序は決まっており、実装依存には出来ない。
項目は構造化(ネスト)されている。
lang
1LogA 2{ 3 "date" : "2017/09/22", 4 "level" : "info", 5 "message" : "aaaaa" 6}
lang
1LogB 2{ 3 "date" : "2017/09/22", 4 "level" : "error", 5 "message" : "bbbbb", 6 "method" : { 7 "name" : "MethodA", 8 "exception" : "ArgumentException" 9 } 10}
- 環境
ASP.NET
.NET Framework 4.6.2
###試したこと
####1. Dictionaryを使う
- 利点
項目の増減に対応しやすい。
Dictionary<string, object>とすれば、ネストにも対応できる。
- 欠点
挿入順保証がされていない。(Addしかしない場合は挿入順になるという記事もありましたが...。)
####2. OrderedDictionaryを使う
- 利点
Dictionaryクラスの利点に加え、挿入順保証もされている。
- 欠点
非ジェネリッククラスである。
####3. 匿名型を使う
- 利点
挿入順は実装次第なので実現は可能。ネストも可。
- 欠点
項目の増減が宣言時しか出来ないため、組み方が難しい。
####4. 専用のクラスを作る
- 利点
C#的なお作法?
サブクラスを定義していけばネストできる。
- 欠点
フルスペックなクラスを作って、そのままJSON化すると不要な項目まで出力されてしまう。
nullなプロパティはシリアライズしないなど、シリアライズ用のメソッドが大変そう。
個人的な見解
OrderedDictionaryを使うのが一番楽かと思うのですが、非ジェネリッククラスを使うのは非推奨なのでしょうか。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。