internal virtual object DeserializeInternal(JsonReader reader, Type objectType) { ValidationUtils.ArgumentNotNull(reader, "reader"); // set serialization options onto reader CultureInfo previousCulture = null; if (_culture != null && !_culture.Equals(reader.Culture)) { previousCulture = reader.Culture; reader.Culture = _culture; } DateTimeZoneHandling?previousDateTimeZoneHandling = null; if (_dateTimeZoneHandling != null && reader.DateTimeZoneHandling != _dateTimeZoneHandling) { previousDateTimeZoneHandling = reader.DateTimeZoneHandling; reader.DateTimeZoneHandling = _dateTimeZoneHandling.Value; } DateParseHandling?previousDateParseHandling = null; if (_dateParseHandling != null && reader.DateParseHandling != _dateParseHandling) { previousDateParseHandling = reader.DateParseHandling; reader.DateParseHandling = _dateParseHandling.Value; } int?previousMaxDepth = null; if (_maxDepthSet && reader.MaxDepth != _maxDepth) { previousMaxDepth = reader.MaxDepth; reader.MaxDepth = _maxDepth; } JsonSerializerInternalReader serializerReader = new JsonSerializerInternalReader(this); object value = serializerReader.Deserialize(reader, objectType, CheckAdditionalContent); // reset reader back to previous options if (previousCulture != null) { reader.Culture = previousCulture; } if (previousDateTimeZoneHandling != null) { reader.DateTimeZoneHandling = previousDateTimeZoneHandling.Value; } if (previousDateParseHandling != null) { reader.DateParseHandling = previousDateParseHandling.Value; } if (_maxDepthSet) { reader.MaxDepth = previousMaxDepth; } return(value); }
private void ResetReader( JsonReader reader, CultureInfo previousCulture, DateTimeZoneHandling?previousDateTimeZoneHandling, DateParseHandling?previousDateParseHandling, FloatParseHandling?previousFloatParseHandling, int?previousMaxDepth, string previousDateFormatString) { if (previousCulture != null) { reader.Culture = previousCulture; } if (previousDateTimeZoneHandling.HasValue) { reader.DateTimeZoneHandling = previousDateTimeZoneHandling.GetValueOrDefault(); } if (previousDateParseHandling.HasValue) { reader.DateParseHandling = previousDateParseHandling.GetValueOrDefault(); } if (previousFloatParseHandling.HasValue) { reader.FloatParseHandling = previousFloatParseHandling.GetValueOrDefault(); } if (this._maxDepthSet) { reader.MaxDepth = previousMaxDepth; } if (this._dateFormatStringSet) { reader.DateFormatString = previousDateFormatString; } JsonTextReader jsonTextReader = reader as JsonTextReader; if (jsonTextReader == null) { return; } jsonTextReader.NameTable = (PropertyNameTable)null; }
internal virtual object DeserializeInternal(JsonReader reader, Type objectType) { ValidationUtils.ArgumentNotNull(reader, "reader"); // set serialization options onto reader CultureInfo previousCulture = null; if (_culture != null && !_culture.Equals(reader.Culture)) { previousCulture = reader.Culture; reader.Culture = _culture; } DateTimeZoneHandling?previousDateTimeZoneHandling = null; if (_dateTimeZoneHandling != null && reader.DateTimeZoneHandling != _dateTimeZoneHandling) { previousDateTimeZoneHandling = reader.DateTimeZoneHandling; reader.DateTimeZoneHandling = _dateTimeZoneHandling.Value; } DateParseHandling?previousDateParseHandling = null; if (_dateParseHandling != null && reader.DateParseHandling != _dateParseHandling) { previousDateParseHandling = reader.DateParseHandling; reader.DateParseHandling = _dateParseHandling.Value; } FloatParseHandling?previousFloatParseHandling = null; if (_floatParseHandling != null && reader.FloatParseHandling != _floatParseHandling) { previousFloatParseHandling = reader.FloatParseHandling; reader.FloatParseHandling = _floatParseHandling.Value; } int?previousMaxDepth = null; if (_maxDepthSet && reader.MaxDepth != _maxDepth) { previousMaxDepth = reader.MaxDepth; reader.MaxDepth = _maxDepth; } TraceJsonReader traceJsonReader = (TraceWriter != null && TraceWriter.LevelFilter >= TraceLevel.Verbose) ? new TraceJsonReader(reader) : null; JsonSerializerInternalReader serializerReader = new JsonSerializerInternalReader(this); object value = serializerReader.Deserialize(traceJsonReader ?? reader, objectType, CheckAdditionalContent); if (traceJsonReader != null) { TraceWriter.Trace(TraceLevel.Verbose, "Deserialized JSON: " + Environment.NewLine + traceJsonReader.GetJson(), null); } // reset reader back to previous options if (previousCulture != null) { reader.Culture = previousCulture; } if (previousDateTimeZoneHandling != null) { reader.DateTimeZoneHandling = previousDateTimeZoneHandling.Value; } if (previousDateParseHandling != null) { reader.DateParseHandling = previousDateParseHandling.Value; } if (previousFloatParseHandling != null) { reader.FloatParseHandling = previousFloatParseHandling.Value; } if (_maxDepthSet) { reader.MaxDepth = previousMaxDepth; } return(value); }
private void ResetReader(JsonReader reader, CultureInfo previousCulture, DateTimeZoneHandling?previousDateTimeZoneHandling, DateParseHandling?previousDateParseHandling, FloatParseHandling?previousFloatParseHandling, int?previousMaxDepth, string previousDateFormatString) { // reset reader back to previous options if (previousCulture != null) { reader.Culture = previousCulture; } if (previousDateTimeZoneHandling != null) { reader.DateTimeZoneHandling = previousDateTimeZoneHandling.Value; } if (previousDateParseHandling != null) { reader.DateParseHandling = previousDateParseHandling.Value; } if (previousFloatParseHandling != null) { reader.FloatParseHandling = previousFloatParseHandling.Value; } if (_maxDepthSet) { reader.MaxDepth = previousMaxDepth; } if (_dateFormatStringSet) { reader.DateFormatString = previousDateFormatString; } JsonTextReader textReader = reader as JsonTextReader; if (textReader != null) { textReader.NameTable = null; } }
private void SetupReader(JsonReader reader, out CultureInfo previousCulture, out DateTimeZoneHandling?previousDateTimeZoneHandling, out DateParseHandling?previousDateParseHandling, out FloatParseHandling?previousFloatParseHandling, out int?previousMaxDepth, out string previousDateFormatString) { if (_culture != null && !_culture.Equals(reader.Culture)) { previousCulture = reader.Culture; reader.Culture = _culture; } else { previousCulture = null; } if (_dateTimeZoneHandling != null && reader.DateTimeZoneHandling != _dateTimeZoneHandling) { previousDateTimeZoneHandling = reader.DateTimeZoneHandling; reader.DateTimeZoneHandling = _dateTimeZoneHandling.Value; } else { previousDateTimeZoneHandling = null; } if (_dateParseHandling != null && reader.DateParseHandling != _dateParseHandling) { previousDateParseHandling = reader.DateParseHandling; reader.DateParseHandling = _dateParseHandling.Value; } else { previousDateParseHandling = null; } if (_floatParseHandling != null && reader.FloatParseHandling != _floatParseHandling) { previousFloatParseHandling = reader.FloatParseHandling; reader.FloatParseHandling = _floatParseHandling.Value; } else { previousFloatParseHandling = null; } if (_maxDepthSet && reader.MaxDepth != _maxDepth) { previousMaxDepth = reader.MaxDepth; reader.MaxDepth = _maxDepth; } else { previousMaxDepth = null; } if (_dateFormatStringSet && reader.DateFormatString != _dateFormatString) { previousDateFormatString = reader.DateFormatString; reader.DateFormatString = _dateFormatString; } else { previousDateFormatString = null; } JsonTextReader textReader = reader as JsonTextReader; if (textReader != null) { DefaultContractResolver resolver = _contractResolver as DefaultContractResolver; if (resolver != null) { textReader.NameTable = resolver.GetState().NameTable; } } }
internal virtual object DeserializeInternal(JsonReader reader, Type objectType) { ValidationUtils.ArgumentNotNull((object)reader, "reader"); CultureInfo cultureInfo = (CultureInfo)null; if (this._culture != null && reader.Culture != this._culture) { cultureInfo = reader.Culture; reader.Culture = this._culture; } DateTimeZoneHandling?nullable1 = new DateTimeZoneHandling?(); if (this._dateTimeZoneHandling.HasValue) { DateTimeZoneHandling timeZoneHandling = reader.DateTimeZoneHandling; DateTimeZoneHandling?nullable2 = this._dateTimeZoneHandling; if ((timeZoneHandling != nullable2.GetValueOrDefault() ? 1 : (!nullable2.HasValue ? 1 : 0)) != 0) { nullable1 = new DateTimeZoneHandling?(reader.DateTimeZoneHandling); reader.DateTimeZoneHandling = this._dateTimeZoneHandling.Value; } } DateParseHandling?nullable3 = new DateParseHandling?(); if (this._dateParseHandling.HasValue) { DateParseHandling dateParseHandling = reader.DateParseHandling; DateParseHandling?nullable2 = this._dateParseHandling; if ((dateParseHandling != nullable2.GetValueOrDefault() ? 1 : (!nullable2.HasValue ? 1 : 0)) != 0) { nullable3 = new DateParseHandling?(reader.DateParseHandling); reader.DateParseHandling = this._dateParseHandling.Value; } } int?nullable4 = new int?(); if (this._maxDepthSet) { int?maxDepth = reader.MaxDepth; int?nullable2 = this._maxDepth; if ((maxDepth.GetValueOrDefault() != nullable2.GetValueOrDefault() ? 1 : (maxDepth.HasValue != nullable2.HasValue ? 1 : 0)) != 0) { nullable4 = reader.MaxDepth; reader.MaxDepth = this._maxDepth; } } object obj = new JsonSerializerInternalReader(this).Deserialize(reader, objectType, this.CheckAdditionalContent); if (cultureInfo != null) { reader.Culture = cultureInfo; } if (nullable1.HasValue) { reader.DateTimeZoneHandling = nullable1.Value; } if (nullable3.HasValue) { reader.DateParseHandling = nullable3.Value; } if (this._maxDepthSet) { reader.MaxDepth = nullable4; } return(obj); }
/// <summary> /// See https://stackoverflow.com/questions/56944160/efficiently-get-full-json-string-in-jsonconverter-readjson /// </summary> private static string ReadOuterJson(JsonReader reader, Formatting formatting = Formatting.None, DateParseHandling?dateParseHandling = DateParseHandling.None, FloatParseHandling?floatParseHandling = null) { if (reader.TokenType == JsonToken.Null) { return(null); } var oldDateParseHandling = reader.DateParseHandling; var oldFloatParseHandling = reader.FloatParseHandling; try { if (dateParseHandling != null) { reader.DateParseHandling = dateParseHandling.Value; } if (floatParseHandling != null) { reader.FloatParseHandling = floatParseHandling.Value; } using (var sw = new StringWriter(CultureInfo.InvariantCulture)) using (var jsonWriter = new JsonTextWriter(sw) { Formatting = formatting }) { jsonWriter.WriteToken(reader); return(sw.ToString()); } } finally { reader.DateParseHandling = oldDateParseHandling; reader.FloatParseHandling = oldFloatParseHandling; } }
private void SetupReader(JsonReader reader, out CultureInfo previousCulture, out DateTimeZoneHandling?previousDateTimeZoneHandling, out DateParseHandling?previousDateParseHandling, out FloatParseHandling?previousFloatParseHandling, out int?previousMaxDepth, out string previousDateFormatString) { if (_culture != null && !_culture.Equals(reader.Culture)) { previousCulture = reader.Culture; reader.Culture = _culture; } else { previousCulture = null; } if (_dateTimeZoneHandling != null && reader.DateTimeZoneHandling != _dateTimeZoneHandling) { previousDateTimeZoneHandling = reader.DateTimeZoneHandling; reader.DateTimeZoneHandling = _dateTimeZoneHandling.Value; } else { previousDateTimeZoneHandling = null; } if (_dateParseHandling != null && reader.DateParseHandling != _dateParseHandling) { previousDateParseHandling = reader.DateParseHandling; reader.DateParseHandling = _dateParseHandling.Value; } else { previousDateParseHandling = null; } if (_floatParseHandling != null && reader.FloatParseHandling != _floatParseHandling) { previousFloatParseHandling = reader.FloatParseHandling; reader.FloatParseHandling = _floatParseHandling.Value; } else { previousFloatParseHandling = null; } if (_maxDepthSet && reader.MaxDepth != _maxDepth) { previousMaxDepth = reader.MaxDepth; reader.MaxDepth = _maxDepth; } else { previousMaxDepth = null; } if (_dateFormatStringSet && reader.DateFormatString != _dateFormatString) { previousDateFormatString = reader.DateFormatString; reader.DateFormatString = _dateFormatString; } else { previousDateFormatString = null; } }
private void SetupReader( JsonReader reader, out CultureInfo previousCulture, out DateTimeZoneHandling?previousDateTimeZoneHandling, out DateParseHandling?previousDateParseHandling, out FloatParseHandling?previousFloatParseHandling, out int?previousMaxDepth, out string previousDateFormatString) { if (this._culture != null && !this._culture.Equals((object)reader.Culture)) { previousCulture = reader.Culture; reader.Culture = this._culture; } else { previousCulture = (CultureInfo)null; } if (this._dateTimeZoneHandling.HasValue) { int timeZoneHandling1 = (int)reader.DateTimeZoneHandling; DateTimeZoneHandling?timeZoneHandling2 = this._dateTimeZoneHandling; int valueOrDefault = (int)timeZoneHandling2.GetValueOrDefault(); if ((timeZoneHandling1 == valueOrDefault ? (!timeZoneHandling2.HasValue ? 1 : 0) : 1) != 0) { previousDateTimeZoneHandling = new DateTimeZoneHandling?(reader.DateTimeZoneHandling); reader.DateTimeZoneHandling = this._dateTimeZoneHandling.GetValueOrDefault(); goto label_7; } } previousDateTimeZoneHandling = new DateTimeZoneHandling?(); label_7: if (this._dateParseHandling.HasValue) { int dateParseHandling1 = (int)reader.DateParseHandling; DateParseHandling?dateParseHandling2 = this._dateParseHandling; int valueOrDefault = (int)dateParseHandling2.GetValueOrDefault(); if ((dateParseHandling1 == valueOrDefault ? (!dateParseHandling2.HasValue ? 1 : 0) : 1) != 0) { previousDateParseHandling = new DateParseHandling?(reader.DateParseHandling); reader.DateParseHandling = this._dateParseHandling.GetValueOrDefault(); goto label_11; } } previousDateParseHandling = new DateParseHandling?(); label_11: if (this._floatParseHandling.HasValue) { int floatParseHandling1 = (int)reader.FloatParseHandling; FloatParseHandling?floatParseHandling2 = this._floatParseHandling; int valueOrDefault = (int)floatParseHandling2.GetValueOrDefault(); if ((floatParseHandling1 == valueOrDefault ? (!floatParseHandling2.HasValue ? 1 : 0) : 1) != 0) { previousFloatParseHandling = new FloatParseHandling?(reader.FloatParseHandling); reader.FloatParseHandling = this._floatParseHandling.GetValueOrDefault(); goto label_15; } } previousFloatParseHandling = new FloatParseHandling?(); label_15: if (this._maxDepthSet) { int?maxDepth1 = reader.MaxDepth; int?maxDepth2 = this._maxDepth; if ((maxDepth1.GetValueOrDefault() == maxDepth2.GetValueOrDefault() ? (maxDepth1.HasValue != maxDepth2.HasValue ? 1 : 0) : 1) != 0) { previousMaxDepth = reader.MaxDepth; reader.MaxDepth = this._maxDepth; goto label_19; } } previousMaxDepth = new int?(); label_19: if (this._dateFormatStringSet && reader.DateFormatString != this._dateFormatString) { previousDateFormatString = reader.DateFormatString; reader.DateFormatString = this._dateFormatString; } else { previousDateFormatString = (string)null; } JsonTextReader jsonTextReader = reader as JsonTextReader; if (jsonTextReader == null) { return; } DefaultContractResolver contractResolver = this._contractResolver as DefaultContractResolver; if (contractResolver == null) { return; } jsonTextReader.NameTable = contractResolver.GetNameTable(); }
internal virtual object DeserializeInternal(JsonReader reader, Type objectType) { ValidationUtils.ArgumentNotNull(reader, "reader"); CultureInfo cultureInfo = null; if (this._culture != null && !this._culture.Equals(reader.Culture)) { cultureInfo = reader.Culture; reader.Culture = this._culture; } DateTimeZoneHandling?dateTimeZoneHandling = null; if (this._dateTimeZoneHandling.HasValue && reader.DateTimeZoneHandling != this._dateTimeZoneHandling) { dateTimeZoneHandling = new DateTimeZoneHandling?(reader.DateTimeZoneHandling); reader.DateTimeZoneHandling = this._dateTimeZoneHandling.Value; } DateParseHandling?dateParseHandling = null; if (this._dateParseHandling.HasValue && reader.DateParseHandling != this._dateParseHandling) { dateParseHandling = new DateParseHandling?(reader.DateParseHandling); reader.DateParseHandling = this._dateParseHandling.Value; } FloatParseHandling?floatParseHandling = null; if (this._floatParseHandling.HasValue && reader.FloatParseHandling != this._floatParseHandling) { floatParseHandling = new FloatParseHandling?(reader.FloatParseHandling); reader.FloatParseHandling = this._floatParseHandling.Value; } int?maxDepth = null; if (this._maxDepthSet && reader.MaxDepth != this._maxDepth) { maxDepth = reader.MaxDepth; reader.MaxDepth = this._maxDepth; } TraceJsonReader traceJsonReader = (this.TraceWriter != null && this.TraceWriter.LevelFilter >= TraceLevel.Verbose) ? new TraceJsonReader(reader) : null; JsonSerializerInternalReader jsonSerializerInternalReader = new JsonSerializerInternalReader(this); object result = jsonSerializerInternalReader.Deserialize(traceJsonReader ?? reader, objectType, this.CheckAdditionalContent); if (traceJsonReader != null) { this.TraceWriter.Trace(TraceLevel.Verbose, "Deserialized JSON: " + Environment.NewLine + traceJsonReader.GetJson(), null); } if (cultureInfo != null) { reader.Culture = cultureInfo; } if (dateTimeZoneHandling.HasValue) { reader.DateTimeZoneHandling = dateTimeZoneHandling.Value; } if (dateParseHandling.HasValue) { reader.DateParseHandling = dateParseHandling.Value; } if (floatParseHandling.HasValue) { reader.FloatParseHandling = floatParseHandling.Value; } if (this._maxDepthSet) { reader.MaxDepth = maxDepth; } return(result); }
private void ResetReader([Nullable(1)] JsonReader reader, CultureInfo previousCulture, DateTimeZoneHandling?previousDateTimeZoneHandling, DateParseHandling?previousDateParseHandling, FloatParseHandling?previousFloatParseHandling, int?previousMaxDepth, string previousDateFormatString) { if (previousCulture != null) { reader.Culture = previousCulture; } if (previousDateTimeZoneHandling != null) { reader.DateTimeZoneHandling = previousDateTimeZoneHandling.GetValueOrDefault(); } if (previousDateParseHandling != null) { reader.DateParseHandling = previousDateParseHandling.GetValueOrDefault(); } if (previousFloatParseHandling != null) { reader.FloatParseHandling = previousFloatParseHandling.GetValueOrDefault(); } if (this._maxDepthSet) { reader.MaxDepth = previousMaxDepth; } if (this._dateFormatStringSet) { reader.DateFormatString = previousDateFormatString; } JsonTextReader jsonTextReader = reader as JsonTextReader; if (jsonTextReader != null && jsonTextReader.PropertyNameTable != null) { DefaultContractResolver defaultContractResolver = this._contractResolver as DefaultContractResolver; if (defaultContractResolver != null && jsonTextReader.PropertyNameTable == defaultContractResolver.GetNameTable()) { jsonTextReader.PropertyNameTable = null; } } }
private void SetupReader([Nullable(1)] JsonReader reader, out CultureInfo previousCulture, out DateTimeZoneHandling?previousDateTimeZoneHandling, out DateParseHandling?previousDateParseHandling, out FloatParseHandling?previousFloatParseHandling, out int?previousMaxDepth, out string previousDateFormatString) { if (this._culture != null && !this._culture.Equals(reader.Culture)) { previousCulture = reader.Culture; reader.Culture = this._culture; } else { previousCulture = null; } if (this._dateTimeZoneHandling != null) { DateTimeZoneHandling dateTimeZoneHandling = reader.DateTimeZoneHandling; DateTimeZoneHandling?dateTimeZoneHandling2 = this._dateTimeZoneHandling; if (!(dateTimeZoneHandling == dateTimeZoneHandling2.GetValueOrDefault() & dateTimeZoneHandling2 != null)) { previousDateTimeZoneHandling = new DateTimeZoneHandling?(reader.DateTimeZoneHandling); reader.DateTimeZoneHandling = this._dateTimeZoneHandling.GetValueOrDefault(); goto IL_9E; } } previousDateTimeZoneHandling = null; IL_9E: if (this._dateParseHandling != null) { DateParseHandling dateParseHandling = reader.DateParseHandling; DateParseHandling?dateParseHandling2 = this._dateParseHandling; if (!(dateParseHandling == dateParseHandling2.GetValueOrDefault() & dateParseHandling2 != null)) { previousDateParseHandling = new DateParseHandling?(reader.DateParseHandling); reader.DateParseHandling = this._dateParseHandling.GetValueOrDefault(); goto IL_101; } } previousDateParseHandling = null; IL_101: if (this._floatParseHandling != null) { FloatParseHandling floatParseHandling = reader.FloatParseHandling; FloatParseHandling?floatParseHandling2 = this._floatParseHandling; if (!(floatParseHandling == floatParseHandling2.GetValueOrDefault() & floatParseHandling2 != null)) { previousFloatParseHandling = new FloatParseHandling?(reader.FloatParseHandling); reader.FloatParseHandling = this._floatParseHandling.GetValueOrDefault(); goto IL_164; } } previousFloatParseHandling = null; IL_164: if (this._maxDepthSet) { int?maxDepth = reader.MaxDepth; int?maxDepth2 = this._maxDepth; if (!(maxDepth.GetValueOrDefault() == maxDepth2.GetValueOrDefault() & maxDepth != null == (maxDepth2 != null))) { previousMaxDepth = reader.MaxDepth; reader.MaxDepth = this._maxDepth; goto IL_1CA; } } previousMaxDepth = null; IL_1CA: if (this._dateFormatStringSet && reader.DateFormatString != this._dateFormatString) { previousDateFormatString = reader.DateFormatString; reader.DateFormatString = this._dateFormatString; } else { previousDateFormatString = null; } JsonTextReader jsonTextReader = reader as JsonTextReader; if (jsonTextReader != null && jsonTextReader.PropertyNameTable == null) { DefaultContractResolver defaultContractResolver = this._contractResolver as DefaultContractResolver; if (defaultContractResolver != null) { jsonTextReader.PropertyNameTable = defaultContractResolver.GetNameTable(); } } }