You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

288 lines
9.4 KiB

  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. using System;
  26. using System.Collections;
  27. using System.Globalization;
  28. using System.Runtime.Serialization.Formatters;
  29. using Newtonsoft.Json.Utilities;
  30. using System.Runtime.Serialization;
  31. namespace Newtonsoft.Json.Serialization
  32. {
  33. internal class JsonSerializerProxy : JsonSerializer
  34. {
  35. private readonly JsonSerializerInternalReader _serializerReader;
  36. private readonly JsonSerializerInternalWriter _serializerWriter;
  37. private readonly JsonSerializer _serializer;
  38. public override event EventHandler<ErrorEventArgs> Error
  39. {
  40. add => _serializer.Error += value;
  41. remove => _serializer.Error -= value;
  42. }
  43. public override IReferenceResolver ReferenceResolver
  44. {
  45. get => _serializer.ReferenceResolver;
  46. set => _serializer.ReferenceResolver = value;
  47. }
  48. public override ITraceWriter TraceWriter
  49. {
  50. get => _serializer.TraceWriter;
  51. set => _serializer.TraceWriter = value;
  52. }
  53. public override IEqualityComparer EqualityComparer
  54. {
  55. get => _serializer.EqualityComparer;
  56. set => _serializer.EqualityComparer = value;
  57. }
  58. public override JsonConverterCollection Converters => _serializer.Converters;
  59. public override DefaultValueHandling DefaultValueHandling
  60. {
  61. get => _serializer.DefaultValueHandling;
  62. set => _serializer.DefaultValueHandling = value;
  63. }
  64. public override IContractResolver ContractResolver
  65. {
  66. get => _serializer.ContractResolver;
  67. set => _serializer.ContractResolver = value;
  68. }
  69. public override MissingMemberHandling MissingMemberHandling
  70. {
  71. get => _serializer.MissingMemberHandling;
  72. set => _serializer.MissingMemberHandling = value;
  73. }
  74. public override NullValueHandling NullValueHandling
  75. {
  76. get => _serializer.NullValueHandling;
  77. set => _serializer.NullValueHandling = value;
  78. }
  79. public override ObjectCreationHandling ObjectCreationHandling
  80. {
  81. get => _serializer.ObjectCreationHandling;
  82. set => _serializer.ObjectCreationHandling = value;
  83. }
  84. public override ReferenceLoopHandling ReferenceLoopHandling
  85. {
  86. get => _serializer.ReferenceLoopHandling;
  87. set => _serializer.ReferenceLoopHandling = value;
  88. }
  89. public override PreserveReferencesHandling PreserveReferencesHandling
  90. {
  91. get => _serializer.PreserveReferencesHandling;
  92. set => _serializer.PreserveReferencesHandling = value;
  93. }
  94. public override TypeNameHandling TypeNameHandling
  95. {
  96. get => _serializer.TypeNameHandling;
  97. set => _serializer.TypeNameHandling = value;
  98. }
  99. public override MetadataPropertyHandling MetadataPropertyHandling
  100. {
  101. get => _serializer.MetadataPropertyHandling;
  102. set => _serializer.MetadataPropertyHandling = value;
  103. }
  104. [Obsolete("TypeNameAssemblyFormat is obsolete. Use TypeNameAssemblyFormatHandling instead.")]
  105. public override FormatterAssemblyStyle TypeNameAssemblyFormat
  106. {
  107. get => _serializer.TypeNameAssemblyFormat;
  108. set => _serializer.TypeNameAssemblyFormat = value;
  109. }
  110. public override TypeNameAssemblyFormatHandling TypeNameAssemblyFormatHandling
  111. {
  112. get => _serializer.TypeNameAssemblyFormatHandling;
  113. set => _serializer.TypeNameAssemblyFormatHandling = value;
  114. }
  115. public override ConstructorHandling ConstructorHandling
  116. {
  117. get => _serializer.ConstructorHandling;
  118. set => _serializer.ConstructorHandling = value;
  119. }
  120. [Obsolete("Binder is obsolete. Use SerializationBinder instead.")]
  121. public override SerializationBinder Binder
  122. {
  123. get => _serializer.Binder;
  124. set => _serializer.Binder = value;
  125. }
  126. public override ISerializationBinder SerializationBinder
  127. {
  128. get => _serializer.SerializationBinder;
  129. set => _serializer.SerializationBinder = value;
  130. }
  131. public override StreamingContext Context
  132. {
  133. get => _serializer.Context;
  134. set => _serializer.Context = value;
  135. }
  136. public override Formatting Formatting
  137. {
  138. get => _serializer.Formatting;
  139. set => _serializer.Formatting = value;
  140. }
  141. public override DateFormatHandling DateFormatHandling
  142. {
  143. get => _serializer.DateFormatHandling;
  144. set => _serializer.DateFormatHandling = value;
  145. }
  146. public override DateTimeZoneHandling DateTimeZoneHandling
  147. {
  148. get => _serializer.DateTimeZoneHandling;
  149. set => _serializer.DateTimeZoneHandling = value;
  150. }
  151. public override DateParseHandling DateParseHandling
  152. {
  153. get => _serializer.DateParseHandling;
  154. set => _serializer.DateParseHandling = value;
  155. }
  156. public override FloatFormatHandling FloatFormatHandling
  157. {
  158. get => _serializer.FloatFormatHandling;
  159. set => _serializer.FloatFormatHandling = value;
  160. }
  161. public override FloatParseHandling FloatParseHandling
  162. {
  163. get => _serializer.FloatParseHandling;
  164. set => _serializer.FloatParseHandling = value;
  165. }
  166. public override StringEscapeHandling StringEscapeHandling
  167. {
  168. get => _serializer.StringEscapeHandling;
  169. set => _serializer.StringEscapeHandling = value;
  170. }
  171. public override string DateFormatString
  172. {
  173. get => _serializer.DateFormatString;
  174. set => _serializer.DateFormatString = value;
  175. }
  176. public override CultureInfo Culture
  177. {
  178. get => _serializer.Culture;
  179. set => _serializer.Culture = value;
  180. }
  181. public override int? MaxDepth
  182. {
  183. get => _serializer.MaxDepth;
  184. set => _serializer.MaxDepth = value;
  185. }
  186. public override bool CheckAdditionalContent
  187. {
  188. get => _serializer.CheckAdditionalContent;
  189. set => _serializer.CheckAdditionalContent = value;
  190. }
  191. internal JsonSerializerInternalBase GetInternalSerializer()
  192. {
  193. if (_serializerReader != null)
  194. {
  195. return _serializerReader;
  196. }
  197. else
  198. {
  199. return _serializerWriter;
  200. }
  201. }
  202. public JsonSerializerProxy(JsonSerializerInternalReader serializerReader)
  203. {
  204. ValidationUtils.ArgumentNotNull(serializerReader, nameof(serializerReader));
  205. _serializerReader = serializerReader;
  206. _serializer = serializerReader.Serializer;
  207. }
  208. public JsonSerializerProxy(JsonSerializerInternalWriter serializerWriter)
  209. {
  210. ValidationUtils.ArgumentNotNull(serializerWriter, nameof(serializerWriter));
  211. _serializerWriter = serializerWriter;
  212. _serializer = serializerWriter.Serializer;
  213. }
  214. internal override object DeserializeInternal(JsonReader reader, Type objectType)
  215. {
  216. if (_serializerReader != null)
  217. {
  218. return _serializerReader.Deserialize(reader, objectType, false);
  219. }
  220. else
  221. {
  222. return _serializer.Deserialize(reader, objectType);
  223. }
  224. }
  225. internal override void PopulateInternal(JsonReader reader, object target)
  226. {
  227. if (_serializerReader != null)
  228. {
  229. _serializerReader.Populate(reader, target);
  230. }
  231. else
  232. {
  233. _serializer.Populate(reader, target);
  234. }
  235. }
  236. internal override void SerializeInternal(JsonWriter jsonWriter, object value, Type rootType)
  237. {
  238. if (_serializerWriter != null)
  239. {
  240. _serializerWriter.Serialize(jsonWriter, value, rootType);
  241. }
  242. else
  243. {
  244. _serializer.Serialize(jsonWriter, value);
  245. }
  246. }
  247. }
  248. }