Serilog 无法解构集合中的匿名复杂对象

问题描述 投票:0回答:1

我无法找到一种方法来解构 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 对对象的解释略有不同,但它仍然无法解构匿名类型中的复杂对象(定义为集合中的属性)。

json logging collections json.net serilog
1个回答
0
投票

对 Destructurama.JsonNet 包的引用和配置就成功了。

© www.soinside.com 2019 - 2024. All rights reserved.