<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

TraceJsonReader

using System; using System.Globalization; using System.IO; using System.Runtime.CompilerServices; namespace Newtonsoft.Json.Serialization { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class TraceJsonReader : JsonReader, IJsonLineInfo { private readonly JsonReader _innerReader; private readonly JsonTextWriter _textWriter; private readonly StringWriter _sw; public override int Depth => _innerReader.Depth; public override string Path => _innerReader.Path; public override char QuoteChar { get { return _innerReader.QuoteChar; } protected internal set { _innerReader.QuoteChar = value; } } public override JsonToken TokenType => _innerReader.TokenType; [System.Runtime.CompilerServices.Nullable(2)] public override object Value { [System.Runtime.CompilerServices.NullableContext(2)] get { return _innerReader.Value; } } [System.Runtime.CompilerServices.Nullable(2)] public override Type ValueType { [System.Runtime.CompilerServices.NullableContext(2)] get { return _innerReader.ValueType; } } int IJsonLineInfo.LineNumber { get { return (_innerReader as IJsonLineInfo)?.LineNumber ?? 0; } } int IJsonLineInfo.LinePosition { get { return (_innerReader as IJsonLineInfo)?.LinePosition ?? 0; } } public TraceJsonReader(JsonReader innerReader) { _innerReader = innerReader; _sw = new StringWriter(CultureInfo.InvariantCulture); _sw.Write("Deserialized JSON: " + Environment.NewLine); _textWriter = new JsonTextWriter(_sw); _textWriter.Formatting = Formatting.Indented; } public string GetDeserializedJsonMessage() { return _sw.ToString(); } public override bool Read() { bool result = _innerReader.Read(); WriteCurrentToken(); return result; } public override int? ReadAsInt32() { int? result = _innerReader.ReadAsInt32(); WriteCurrentToken(); return result; } [System.Runtime.CompilerServices.NullableContext(2)] public override string ReadAsString() { string result = _innerReader.ReadAsString(); WriteCurrentToken(); return result; } [System.Runtime.CompilerServices.NullableContext(2)] public override byte[] ReadAsBytes() { byte[] result = _innerReader.ReadAsBytes(); WriteCurrentToken(); return result; } public override decimal? ReadAsDecimal() { decimal? result = _innerReader.ReadAsDecimal(); WriteCurrentToken(); return result; } public override double? ReadAsDouble() { double? result = _innerReader.ReadAsDouble(); WriteCurrentToken(); return result; } public override bool? ReadAsBoolean() { bool? result = _innerReader.ReadAsBoolean(); WriteCurrentToken(); return result; } public override DateTime? ReadAsDateTime() { DateTime? result = _innerReader.ReadAsDateTime(); WriteCurrentToken(); return result; } public override DateTimeOffset? ReadAsDateTimeOffset() { DateTimeOffset? result = _innerReader.ReadAsDateTimeOffset(); WriteCurrentToken(); return result; } public void WriteCurrentToken() { _textWriter.WriteToken(_innerReader, false, false, true); } public override void Close() { _innerReader.Close(); } bool IJsonLineInfo.HasLineInfo() { return (_innerReader as IJsonLineInfo)?.HasLineInfo() ?? false; } } }