Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 分解复杂对象的字典_Asp.net Core_Serilog - Fatal编程技术网

Asp.net core 分解复杂对象的字典

Asp.net core 分解复杂对象的字典,asp.net-core,serilog,Asp.net Core,Serilog,根据,可以记录字典,serilog将对其进行分解,包括对对象的深入分解 如果是这样,有人知道为什么下面的代码不能按预期工作吗 public class ActionLoggingAttribute : ActionFilterAttribute { private ILogger _logger; public ActionLoggingAttribute(ILogger<ActionLoggingAttribute> logger) { _

根据,可以记录字典,serilog将对其进行分解,包括对对象的深入分解

如果是这样,有人知道为什么下面的代码不能按预期工作吗

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));
        }
    }
}
问题:

  • 它看起来像一个数组,而不是一个字典。为什么?它还包含引号
  • 为什么对象也没有被分解
  • 编辑: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());
    
    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());