我无法找到一种方法来解构 Serilog 日志框架中定义为匿名类型和复杂对象的任何集合属性。
例如:
类定义:
public class LogRequest
{
public string? LogMessage { get; set; }
public Dictionary<string, object>? AdditionalMetaData { get; set; }
}
.NET Web API 控制器中的日志记录方法:
[HttpPost("information")]
public void LogInformation([FromBody] LogRequest requestData)
{
logger.Information("{@requestData}", requestData);
}
请求的 JSON 负载
{
"logMessage": "Test log message",
"additionalMetaData" :{
"SomeMetaData": 1234,
"TimeOfLog": "00:00",
"SomeOtherObject": {
"SomeProperty": "Some Value",
"SomeOtherMetaData": 1234
}
}
}
Serilog对该对象的解释:
{
requestData: {
AdditionalMetaData: {
SomeMetaData: 1234,
SomeOtherObject: [
[[]],
[[]]
],
TimeOfLog: 00:00
},
LogMessage: Test log message
}
}
如您所见,集合中由传入有效负载定义的任何复杂对象(表示为匿名类型)都无法由 Serilog 正确解构。 “SomeOtherObject”的属性值在解释中被 Serilog 完全抹掉了。
我会提到,在这个示例中,我使用 Newtonsoft.Json NuGet 包反序列化传入的 JSON 有效负载。 “SomeOtherObject”正在被反序列化为 JObject 类型。
System.Text.JSon 反序列化也有同样的效果。 Serilog 对对象的解释略有不同,但它仍然无法解构匿名类型中的复杂对象(定义为集合中的属性)。
对 Destructurama.JsonNet 包的引用和配置就成功了。