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 }