Asp.net core 分解复杂对象的字典
根据,可以记录字典,serilog将对其进行分解,包括对对象的深入分解 如果是这样,有人知道为什么下面的代码不能按预期工作吗Asp.net core 分解复杂对象的字典,asp.net-core,serilog,Asp.net Core,Serilog,根据,可以记录字典,serilog将对其进行分解,包括对对象的深入分解 如果是这样,有人知道为什么下面的代码不能按预期工作吗 public class ActionLoggingAttribute : ActionFilterAttribute { private ILogger _logger; public ActionLoggingAttribute(ILogger<ActionLoggingAttribute> logger) { _
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));
}
}
}
问题:
var paramsMessageToBeLogged = "Request parameters : ";
var paramsList = new List<object>();
foreach (var param in context.ActionArguments)
{
paramsMessageToBeLogged = paramsMessageToBeLogged + string.Format("{{@{0}}} ", param.Key);
paramsList.Add(param.Value);
}
_logger.LogInformation(paramsMessageToBeLogged, paramsList.ToArray());
var paramsessagetobelogged=“请求参数:”;
var paramsList=新列表();
foreach(context.ActionArguments中的var参数)
{
paramsessagetobelogged=paramsessagetobelogged+string.Format(“{{{0}}}”,param.Key);
参数列表添加(参数值);
}
_logger.LogInformation(paramsessagetobelogged,paramsList.ToArray());
如果有人有更好的建议,那就太好了。同时,这也起作用。大多数C#JSON库将字典序列化为具有属性的对象,其中属性等于字典中的键。它比
[{“key”:“someKeyname”,“value”:1234},{…}]
更小,也不太详细。如果是这样,我希望它被序列化为{“key1”:“value1”,“key2”:“value2”}
。在我的例子中,newCard
是键,未正确序列化的对象是值。现在看来,它只是被序列化为一个数组。这看起来像Serilog.Extensions.Logging适配器(连接ASP.NET Core的日志和Serilog提供程序)中的一个bug。所编写的代码应该可以像您期望的那样工作。感谢您让我放心尼古拉斯:)
var paramsMessageToBeLogged = "Request parameters : ";
var paramsList = new List<object>();
foreach (var param in context.ActionArguments)
{
paramsMessageToBeLogged = paramsMessageToBeLogged + string.Format("{{@{0}}} ", param.Key);
paramsList.Add(param.Value);
}
_logger.LogInformation(paramsMessageToBeLogged, paramsList.ToArray());