#region License // Copyright (c) 2007 James Newton-King // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the "Software"), to deal in the Software without // restriction, including without limitation the rights to use, // copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following // conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR // OTHER DEALINGS IN THE SOFTWARE. #endregion using System; using System.Collections; using System.Globalization; using System.Runtime.Serialization.Formatters; using LC.Newtonsoft.Json.Utilities; using System.Runtime.Serialization; namespace LC.Newtonsoft.Json.Serialization { internal class JsonSerializerProxy : JsonSerializer { private readonly JsonSerializerInternalReader? _serializerReader; private readonly JsonSerializerInternalWriter? _serializerWriter; private readonly JsonSerializer _serializer; public override event EventHandler? Error { add => _serializer.Error += value; remove => _serializer.Error -= value; } public override IReferenceResolver? ReferenceResolver { get => _serializer.ReferenceResolver; set => _serializer.ReferenceResolver = value; } public override ITraceWriter? TraceWriter { get => _serializer.TraceWriter; set => _serializer.TraceWriter = value; } public override IEqualityComparer? EqualityComparer { get => _serializer.EqualityComparer; set => _serializer.EqualityComparer = value; } public override JsonConverterCollection Converters => _serializer.Converters; public override DefaultValueHandling DefaultValueHandling { get => _serializer.DefaultValueHandling; set => _serializer.DefaultValueHandling = value; } public override IContractResolver ContractResolver { get => _serializer.ContractResolver; set => _serializer.ContractResolver = value; } public override MissingMemberHandling MissingMemberHandling { get => _serializer.MissingMemberHandling; set => _serializer.MissingMemberHandling = value; } public override NullValueHandling NullValueHandling { get => _serializer.NullValueHandling; set => _serializer.NullValueHandling = value; } public override ObjectCreationHandling ObjectCreationHandling { get => _serializer.ObjectCreationHandling; set => _serializer.ObjectCreationHandling = value; } public override ReferenceLoopHandling ReferenceLoopHandling { get => _serializer.ReferenceLoopHandling; set => _serializer.ReferenceLoopHandling = value; } public override PreserveReferencesHandling PreserveReferencesHandling { get => _serializer.PreserveReferencesHandling; set => _serializer.PreserveReferencesHandling = value; } public override TypeNameHandling TypeNameHandling { get => _serializer.TypeNameHandling; set => _serializer.TypeNameHandling = value; } public override MetadataPropertyHandling MetadataPropertyHandling { get => _serializer.MetadataPropertyHandling; set => _serializer.MetadataPropertyHandling = value; } [Obsolete("TypeNameAssemblyFormat is obsolete. Use TypeNameAssemblyFormatHandling instead.")] public override FormatterAssemblyStyle TypeNameAssemblyFormat { get => _serializer.TypeNameAssemblyFormat; set => _serializer.TypeNameAssemblyFormat = value; } public override TypeNameAssemblyFormatHandling TypeNameAssemblyFormatHandling { get => _serializer.TypeNameAssemblyFormatHandling; set => _serializer.TypeNameAssemblyFormatHandling = value; } public override ConstructorHandling ConstructorHandling { get => _serializer.ConstructorHandling; set => _serializer.ConstructorHandling = value; } [Obsolete("Binder is obsolete. Use SerializationBinder instead.")] public override SerializationBinder Binder { get => _serializer.Binder; set => _serializer.Binder = value; } public override ISerializationBinder SerializationBinder { get => _serializer.SerializationBinder; set => _serializer.SerializationBinder = value; } public override StreamingContext Context { get => _serializer.Context; set => _serializer.Context = value; } public override Formatting Formatting { get => _serializer.Formatting; set => _serializer.Formatting = value; } public override DateFormatHandling DateFormatHandling { get => _serializer.DateFormatHandling; set => _serializer.DateFormatHandling = value; } public override DateTimeZoneHandling DateTimeZoneHandling { get => _serializer.DateTimeZoneHandling; set => _serializer.DateTimeZoneHandling = value; } public override DateParseHandling DateParseHandling { get => _serializer.DateParseHandling; set => _serializer.DateParseHandling = value; } public override FloatFormatHandling FloatFormatHandling { get => _serializer.FloatFormatHandling; set => _serializer.FloatFormatHandling = value; } public override FloatParseHandling FloatParseHandling { get => _serializer.FloatParseHandling; set => _serializer.FloatParseHandling = value; } public override StringEscapeHandling StringEscapeHandling { get => _serializer.StringEscapeHandling; set => _serializer.StringEscapeHandling = value; } public override string DateFormatString { get => _serializer.DateFormatString; set => _serializer.DateFormatString = value; } public override CultureInfo Culture { get => _serializer.Culture; set => _serializer.Culture = value; } public override int? MaxDepth { get => _serializer.MaxDepth; set => _serializer.MaxDepth = value; } public override bool CheckAdditionalContent { get => _serializer.CheckAdditionalContent; set => _serializer.CheckAdditionalContent = value; } internal JsonSerializerInternalBase GetInternalSerializer() { if (_serializerReader != null) { return _serializerReader; } else { return _serializerWriter!; } } public JsonSerializerProxy(JsonSerializerInternalReader serializerReader) { ValidationUtils.ArgumentNotNull(serializerReader, nameof(serializerReader)); _serializerReader = serializerReader; _serializer = serializerReader.Serializer; } public JsonSerializerProxy(JsonSerializerInternalWriter serializerWriter) { ValidationUtils.ArgumentNotNull(serializerWriter, nameof(serializerWriter)); _serializerWriter = serializerWriter; _serializer = serializerWriter.Serializer; } internal override object? DeserializeInternal(JsonReader reader, Type? objectType) { if (_serializerReader != null) { return _serializerReader.Deserialize(reader, objectType, false); } else { return _serializer.Deserialize(reader, objectType); } } internal override void PopulateInternal(JsonReader reader, object target) { if (_serializerReader != null) { _serializerReader.Populate(reader, target); } else { _serializer.Populate(reader, target); } } internal override void SerializeInternal(JsonWriter jsonWriter, object? value, Type? rootType) { if (_serializerWriter != null) { _serializerWriter.Serialize(jsonWriter, value, rootType); } else { _serializer.Serialize(jsonWriter, value); } } } }