using System; using System.Globalization; using System.IO; namespace DPumpHydr.WinFrmUI.WenSkin.Json.Serialization { 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; public override object Value => _innerReader.Value; public override Type ValueType => _innerReader.ValueType; int IJsonLineInfo.LineNumber => (_innerReader as IJsonLineInfo)?.LineNumber ?? 0; int IJsonLineInfo.LinePosition => (_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(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override int? ReadAsInt32() { int? result = _innerReader.ReadAsInt32(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override string ReadAsString() { string result = _innerReader.ReadAsString(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override byte[] ReadAsBytes() { byte[] result = _innerReader.ReadAsBytes(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override decimal? ReadAsDecimal() { decimal? result = _innerReader.ReadAsDecimal(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override double? ReadAsDouble() { double? result = _innerReader.ReadAsDouble(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override bool? ReadAsBoolean() { bool? result = _innerReader.ReadAsBoolean(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override DateTime? ReadAsDateTime() { DateTime? result = _innerReader.ReadAsDateTime(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override DateTimeOffset? ReadAsDateTimeOffset() { DateTimeOffset? result = _innerReader.ReadAsDateTimeOffset(); _textWriter.WriteToken(_innerReader, writeChildren: false, writeDateConstructorAsDate: false, writeComments: true); return result; } public override void Close() { _innerReader.Close(); } bool IJsonLineInfo.HasLineInfo() { return (_innerReader as IJsonLineInfo)?.HasLineInfo() ?? false; } } }