NewtonSoft.JSON官方手册中文版【连载16】

带序列化跟踪的调试

Json.NET支持利用ITraceWriter实现记录日志和调试。通过分配跟踪写入程序,您可以捕获序列化消息和错误,并在序列化JSON和反序列化JSON时调试Json.NET序列化器内部发生的情况。

  • ITraceWriter
  • Custom ITraceWriter

ITraceWriter

一个跟踪写入程序,可以利用JsonSerializerSettings或JsonSerializer上的属性来分配它。

利用MemoryTraceWriter调试序列化

Staff staff = new Staff();
staff.Name = "Arnie Admin";
staff.Roles = new List<string> { "Administrator" };
staff.StartDate = new DateTime(2000, 12, 12, 12, 12, 12, DateTimeKind.Utc);
ITraceWriter traceWriter = new MemoryTraceWriter();
JsonConvert.SerializeObject(
  staff,
  new JsonSerializerSettings { TraceWriter = traceWriter, Converters = { new JavaScriptDateTimeConverter() } });
Console.WriteLine(traceWriter);
// 2012-11-11T12:08:42.761 Info Started serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
// 2012-11-11T12:08:42.785 Info Started serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
// 2012-11-11T12:08:42.791 Info Finished serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
// 2012-11-11T12:08:42.797 Info Started serializing System.Collections.Generic.List\1[System.String]. Path 'Roles'.
// 2012-11-11T12:08:42.798 Info Finished serializing System.Collections.Generic.List\1[System.String]. Path 'Roles'.
// 2012-11-11T12:08:42.799 Info Finished serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
// 2013-05-18T21:38:11.255 Verbose Serialized JSON:

// {
//   "Name": "Arnie Admin",
//   "StartDate": new Date(
//     976623132000
//   ),
//   "Roles": [
//     "Administrator"
//   ]
// }

Json.NET具有两种ITraceWriter的实现程序:MemoryTraceWriter,它把消息保存在内存中,用于简单的调试,像上面的示例,还有DiagnosticsTraceWriter,它把消息写到你的应用程序呆以使用的任何System.Diagnostics.TraceListeners中。

Custom ITraceWriter

若要用你已有的日志框架写消息,只需要实现一个自定义版本的ITraceWriter。

自定义NLog TraceWriter

public class NLogTraceWriter : ITraceWriter
{
  private static readonly Logger Logger = LogManager.GetLogger("NLogTraceWriter");
  public TraceLevel LevelFilter
  {
      // trace all messages. nlog can handle filtering
      get { return TraceLevel.Verbose; }
  }
  public void Trace(TraceLevel level, string message, Exception ex)
  {
      LogEventInfo logEvent = new LogEventInfo
      {
          Message = message,
          Level = GetLogLevel(level),
          Exception = ex
      };
      // log Json.NET message to NLog
      Logger.Log(logEvent);
  }
  private LogLevel GetLogLevel(TraceLevel level)
  {
      switch (level)
      {
          case TraceLevel.Error:
              return LogLevel.Error;
          case TraceLevel.Warning:
              return LogLevel.Warn;
          case TraceLevel.Info:
              return LogLevel.Info;
          case TraceLevel.Off:
              return LogLevel.Off;
          default:
              return LogLevel.Trace;
      }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值