Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net Serilog:{..}和{@..}之间的区别_.net_Serilog - Fatal编程技术网

.net Serilog:{..}和{@..}之间的区别

.net Serilog:{..}和{@..}之间的区别,.net,serilog,.net,Serilog,鉴于此代码: var d1 = new { x = 5, y = 88 }; Log.Logger.Information("{d1}", d1); Log.Logger.Information("{@d1}", d1); d1中的对象如何在两个Log.Logger.Information(…)行中以不同的方式记录? 换句话说,在{}之间添加@In有什么效果 我在标题“保存对象结构”下阅读了这篇文章,但这对我来说没有意义。{d1}将无法识别的类型(如此处的匿名类型)转换为字符串s进行日志记录,

鉴于此代码:

var d1 = new { x = 5, y = 88 };
Log.Logger.Information("{d1}", d1);
Log.Logger.Information("{@d1}", d1);
d1中的对象如何在两个Log.Logger.Information(…)行中以不同的方式记录? 换句话说,在{}之间添加@In有什么效果


我在标题“保存对象结构”下阅读了这篇文章,但这对我来说没有意义。

{d1}
将无法识别的类型(如此处的匿名类型)转换为
字符串
s进行日志记录,即使用
ToString()
。因此,第一个示例中的日志事件将以如下属性结束(在JSON中):

使用
{@d1}
将导致参数序列化为结构化数据:

{
  "d1":
  {
    "x": 5,
    "y": 88
  }
}
在适当的情况下,第二个示例对于操作/分析更有用


这种“选择加入”要求的原因是.NET程序中的大多数类型都能很好地转换为字符串,但不能干净/有意义地序列化。通过选择使用
@
进行序列化,您的意思是:“我知道我在做什么,序列化这个对象!”:)

实际上有
{..}
(默认)、
{$..}
(stringify)和
{..}
(解构)。也许有更多的帮助吗?这对我来说还不够清楚。“default”和“destructure”似乎都将对象存储为结构化对象,而不是字符串。我理解这两者之间的区别,但我看不出来。很方便,有人刚刚写了一个很棒的Pluralsight课程来解释这一点:如果对象有一个属于List类型的公共属性怎么办?我看到Serilog正在对对象进行解构,列出了所有双精度和整数属性,但没有列出这个特殊的属性,它的类型是List。@注意:列表可能是公共字段,而不是属性吗?Serilog忽略字段,所以这是一种可能性。如果没有-你能在一个新问题中发布你的代码吗?干杯完全正确它是一个字段而不是属性。我的错误。
{
  "d1":
  {
    "x": 5,
    "y": 88
  }
}