1 #region License 2 // Copyright (c) 2007 James Newton-King 3 // 4 // Permission is hereby granted, free of charge, to any person 5 // obtaining a copy of this software and associated documentation 6 // files (the "Software"), to deal in the Software without 7 // restriction, including without limitation the rights to use, 8 // copy, modify, merge, publish, distribute, sublicense, and/or sell 9 // copies of the Software, and to permit persons to whom the 10 // Software is furnished to do so, subject to the following 11 // conditions: 12 // 13 // The above copyright notice and this permission notice shall be 14 // included in all copies or substantial portions of the Software. 15 // 16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 // OTHER DEALINGS IN THE SOFTWARE. 24 #endregion 25 26 using System; 27 using System.Globalization; 28 using System.Runtime.Serialization.Formatters; 29 using Newtonsoft.Json.Utilities; 30 using System.Runtime.Serialization; 31 32 namespace Newtonsoft.Json.Serialization 33 { 34 internal class JsonSerializerProxy : JsonSerializer 35 { 36 private readonly JsonSerializerInternalReader _serializerReader; 37 private readonly JsonSerializerInternalWriter _serializerWriter; 38 private readonly JsonSerializer _serializer; 39 40 public override event EventHandler<ErrorEventArgs> Error 41 { 42 add { _serializer.Error += value; } 43 remove { _serializer.Error -= value; } 44 } 45 46 public override IReferenceResolver ReferenceResolver 47 { 48 get { return _serializer.ReferenceResolver; } 49 set { _serializer.ReferenceResolver = value; } 50 } 51 52 public override JsonConverterCollection Converters 53 { 54 get { return _serializer.Converters; } 55 } 56 57 public override DefaultValueHandling DefaultValueHandling 58 { 59 get { return _serializer.DefaultValueHandling; } 60 set { _serializer.DefaultValueHandling = value; } 61 } 62 63 public override IContractResolver ContractResolver 64 { 65 get { return _serializer.ContractResolver; } 66 set { _serializer.ContractResolver = value; } 67 } 68 69 public override MissingMemberHandling MissingMemberHandling 70 { 71 get { return _serializer.MissingMemberHandling; } 72 set { _serializer.MissingMemberHandling = value; } 73 } 74 75 public override NullValueHandling NullValueHandling 76 { 77 get { return _serializer.NullValueHandling; } 78 set { _serializer.NullValueHandling = value; } 79 } 80 81 public override ObjectCreationHandling ObjectCreationHandling 82 { 83 get { return _serializer.ObjectCreationHandling; } 84 set { _serializer.ObjectCreationHandling = value; } 85 } 86 87 public override ReferenceLoopHandling ReferenceLoopHandling 88 { 89 get { return _serializer.ReferenceLoopHandling; } 90 set { _serializer.ReferenceLoopHandling = value; } 91 } 92 93 public override PreserveReferencesHandling PreserveReferencesHandling 94 { 95 get { return _serializer.PreserveReferencesHandling; } 96 set { _serializer.PreserveReferencesHandling = value; } 97 } 98 99 public override TypeNameHandling TypeNameHandling 100 { 101 get { return _serializer.TypeNameHandling; } 102 set { _serializer.TypeNameHandling = value; } 103 } 104 105 public override FormatterAssemblyStyle TypeNameAssemblyFormat 106 { 107 get { return _serializer.TypeNameAssemblyFormat; } 108 set { _serializer.TypeNameAssemblyFormat = value; } 109 } 110 111 public override ConstructorHandling ConstructorHandling 112 { 113 get { return _serializer.ConstructorHandling; } 114 set { _serializer.ConstructorHandling = value; } 115 } 116 117 public override SerializationBinder Binder 118 { 119 get { return _serializer.Binder; } 120 set { _serializer.Binder = value; } 121 } 122 123 public override StreamingContext Context 124 { 125 get { return _serializer.Context; } 126 set { _serializer.Context = value; } 127 } 128 129 public override Formatting Formatting 130 { 131 get { return _serializer.Formatting; } 132 set { _serializer.Formatting = value; } 133 } 134 135 public override DateFormatHandling DateFormatHandling 136 { 137 get { return _serializer.DateFormatHandling; } 138 set { _serializer.DateFormatHandling = value; } 139 } 140 141 public override DateTimeZoneHandling DateTimeZoneHandling 142 { 143 get { return _serializer.DateTimeZoneHandling; } 144 set { _serializer.DateTimeZoneHandling = value; } 145 } 146 147 public override DateParseHandling DateParseHandling 148 { 149 get { return _serializer.DateParseHandling; } 150 set { _serializer.DateParseHandling = value; } 151 } 152 153 public override CultureInfo Culture 154 { 155 get { return _serializer.Culture; } 156 set { _serializer.Culture = value; } 157 } 158 159 public override int? MaxDepth 160 { 161 get { return _serializer.MaxDepth; } 162 set { _serializer.MaxDepth = value; } 163 } 164 165 public override bool CheckAdditionalContent 166 { 167 get { return _serializer.CheckAdditionalContent; } 168 set { _serializer.CheckAdditionalContent = value; } 169 } 170 GetInternalSerializer()171 internal JsonSerializerInternalBase GetInternalSerializer() 172 { 173 if (_serializerReader != null) 174 return _serializerReader; 175 else 176 return _serializerWriter; 177 } 178 JsonSerializerProxy(JsonSerializerInternalReader serializerReader)179 public JsonSerializerProxy(JsonSerializerInternalReader serializerReader) 180 { 181 ValidationUtils.ArgumentNotNull(serializerReader, "serializerReader"); 182 183 _serializerReader = serializerReader; 184 _serializer = serializerReader.Serializer; 185 } 186 JsonSerializerProxy(JsonSerializerInternalWriter serializerWriter)187 public JsonSerializerProxy(JsonSerializerInternalWriter serializerWriter) 188 { 189 ValidationUtils.ArgumentNotNull(serializerWriter, "serializerWriter"); 190 191 _serializerWriter = serializerWriter; 192 _serializer = serializerWriter.Serializer; 193 } 194 DeserializeInternal(JsonReader reader, Type objectType)195 internal override object DeserializeInternal(JsonReader reader, Type objectType) 196 { 197 if (_serializerReader != null) 198 return _serializerReader.Deserialize(reader, objectType, false); 199 else 200 return _serializer.Deserialize(reader, objectType); 201 } 202 PopulateInternal(JsonReader reader, object target)203 internal override void PopulateInternal(JsonReader reader, object target) 204 { 205 if (_serializerReader != null) 206 _serializerReader.Populate(reader, target); 207 else 208 _serializer.Populate(reader, target); 209 } 210 SerializeInternal(JsonWriter jsonWriter, object value)211 internal override void SerializeInternal(JsonWriter jsonWriter, object value) 212 { 213 if (_serializerWriter != null) 214 _serializerWriter.Serialize(jsonWriter, value); 215 else 216 _serializer.Serialize(jsonWriter, value); 217 } 218 } 219 }