Serilog 和 ExpandoObject
Serilog and ExpandoObject
如果我有这样的 ExpandoObject:
dynamic d = new ExpandoObject();
d.x = "a";
d.y = "b";
并使用 JsonFormatter 将其通过 Serilog 记录到 RollingFile,如下所示:
_logger.Debug("{@d}", d);
它将被序列化为 json 像这样:
[{"_typeTag":"KeyValuePair`2","Key":"x","Value":"a"},{"_typeTag":"KeyValuePair`2","Key":"y","Value":"b"}]
如果我使用 Newtonsoft.Json 像这样序列化相同的 ExpandoObject:
JsonConvert.SerializeObject(d)
我会得到这个:
{"x":"a","y":"b"}
如何让 Serilog 产生与 Newtonsoft.Json 相同的 json?
添加:
.Destructure.ByTransforming<ExpandoObject>(e => new Dictionary<string,object>(e))
你的 LoggerConfiguration
应该这样做。
如果我有这样的 ExpandoObject:
dynamic d = new ExpandoObject();
d.x = "a";
d.y = "b";
并使用 JsonFormatter 将其通过 Serilog 记录到 RollingFile,如下所示:
_logger.Debug("{@d}", d);
它将被序列化为 json 像这样:
[{"_typeTag":"KeyValuePair`2","Key":"x","Value":"a"},{"_typeTag":"KeyValuePair`2","Key":"y","Value":"b"}]
如果我使用 Newtonsoft.Json 像这样序列化相同的 ExpandoObject:
JsonConvert.SerializeObject(d)
我会得到这个:
{"x":"a","y":"b"}
如何让 Serilog 产生与 Newtonsoft.Json 相同的 json?
添加:
.Destructure.ByTransforming<ExpandoObject>(e => new Dictionary<string,object>(e))
你的 LoggerConfiguration
应该这样做。