Serilog 和 ExpandoObject

And*_*rew 3 json expandoobject serilog

如果我有这样的 ExpandoObject:

dynamic d = new ExpandoObject();
d.x = "a";
d.y = "b";
Run Code Online (Sandbox Code Playgroud)

并使用 JsonFormatter 将 Serilog 记录到 RollingFile,如下所示:

_logger.Debug("{@d}", d);
Run Code Online (Sandbox Code Playgroud)

它将被序列化为 json,如下所示:

[{"_typeTag":"KeyValuePair`2","Key":"x","Value":"a"},{"_typeTag":"KeyValuePair`2","Key":"y","Value":"b"}]
Run Code Online (Sandbox Code Playgroud)

如果我使用 Newtonsoft.Json 序列化相同的 ExpandoObject,如下所示:

JsonConvert.SerializeObject(d)
Run Code Online (Sandbox Code Playgroud)

我会得到这个:

{"x":"a","y":"b"}
Run Code Online (Sandbox Code Playgroud)

如何使 Serilog 生成与 Newtonsoft.Json 相同的 json?

Nic*_*rdt 6

添加:

.Destructure.ByTransforming<ExpandoObject>(e => new Dictionary<string,object>(e))
Run Code Online (Sandbox Code Playgroud)

LoggerConfiguration应该这样做。