1
Serilog's documentationによれば、辞書をログに記録することが可能で、serilogはオブジェクトを詳細に破壊するなど、構造を破壊します。複雑なオブジェクトの辞書を破棄する
その場合は、次のコードは期待通りに動作しない理由を、誰もがアイデアを持っているん:以下の出力で
public class ActionLoggingAttribute : ActionFilterAttribute
{
private ILogger _logger;
public ActionLoggingAttribute(ILogger<ActionLoggingAttribute> logger)
{
_logger = logger;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.ActionArguments.Count > 0)
{
_logger.LogInformation("Request parameters: {@parameters}", new Dictionary<string, object>(context.ActionArguments));
}
}
}
結果:
{... "MessageTemplate":"Request parameters: {@parameters}","Properties":{"parameters":"[newCard(key), Namespace.ClassNameInsteadOfTheActualObject(value)]" ...}}
質問:
を- これは辞書のようなものではありません。どうして?引用符も含まれています。
- なぜオブジェクトも破壊されていないのですか?
ほとんどのC#JSONライブラリは、プロパティが辞書内のキーに等しいプロパティを持つオブジェクトに辞書をシリアル化します。 '' {'"key": "someKeyname"、 "value":1234}、{...}] ' – Tseng
もしそうなら、' {"key1"としてシリアライズされると思います: "value1"、 "key2": "value2"} '。 私の場合、 'newCard'がキーであり、正しくシリアル化されていないオブジェクトが値です。今のように、配列としてシリアル化されているように見えます。 – DotnetProg
これは_Serilog.Extensions.Logging_アダプタ(ASP.NET CoreのログをSerilogプロバイダに接続する)のバグのように思われます。書かれたコードは期待通りに機能するはずです。 –