在NLog中如何将指定属性序列化为原生JSON而非转义字符串?
解决方案
修改JsonLayout中Foo属性对应的attribute配置,新增encode和valueType参数即可,修改后的完整配置如下:
<target> <layout xsi:type="JsonLayout"> <attribute name="Foo" layout="${event-properties:item=Foo}" encode="false" valueType="Json" /> </layout> </target>
参数说明
valueType="Json":显式声明该属性的内容为JSON格式,NLog不会自动为它添加外层引号,也不会按普通字符串规则处理encode="false":关闭默认的特殊字符转义逻辑,避免JSON内部的双引号被自动转义为\"
兼容场景说明
- 如果你的NLog版本低于4.7(
valueType参数的最低支持版本),可以去掉valueType="Json",仅保留encode="false"即可,需要自行确保存入Foo属性的字符串为合法JSON格式。 - 如果你的Foo属性存储的是未序列化的原生对象,将layout调整为
${event-properties:item=Foo:@}即可,NLog会自动将对象序列化为嵌套JSON,无需手动提前序列化。
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

