diff --git a/Src/Newtonsoft.Json/Converters/BinaryConverter.cs b/Src/Newtonsoft.Json/Converters/BinaryConverter.cs index 593f53c1..34b878b8 100644 --- a/Src/Newtonsoft.Json/Converters/BinaryConverter.cs +++ b/Src/Newtonsoft.Json/Converters/BinaryConverter.cs @@ -99,10 +99,6 @@ namespace Newtonsoft.Json.Converters /// The object value. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - Type t = (ReflectionUtils.IsNullableType(objectType)) - ? Nullable.GetUnderlyingType(objectType) - : objectType; - if (reader.TokenType == JsonToken.Null) { if (!ReflectionUtils.IsNullable(objectType)) @@ -131,6 +127,10 @@ namespace Newtonsoft.Json.Converters throw JsonSerializationException.Create(reader, "Unexpected token parsing binary. Expected String or StartArray, got {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } + Type t = (ReflectionUtils.IsNullableType(objectType)) + ? Nullable.GetUnderlyingType(objectType) + : objectType; + #if !NET20 if (t.AssignableToTypeName(BinaryTypeName)) { diff --git a/Src/Newtonsoft.Json/Converters/JavaScriptDateTimeConverter.cs b/Src/Newtonsoft.Json/Converters/JavaScriptDateTimeConverter.cs index 96846728..0f0e7ff4 100644 --- a/Src/Newtonsoft.Json/Converters/JavaScriptDateTimeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/JavaScriptDateTimeConverter.cs @@ -78,12 +78,6 @@ namespace Newtonsoft.Json.Converters /// The object value. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { -#if !NET20 - Type t = (ReflectionUtils.IsNullableType(objectType)) - ? Nullable.GetUnderlyingType(objectType) - : objectType; -#endif - if (reader.TokenType == JsonToken.Null) { if (!ReflectionUtils.IsNullable(objectType)) @@ -118,6 +112,9 @@ namespace Newtonsoft.Json.Converters } #if !NET20 + Type t = (ReflectionUtils.IsNullableType(objectType)) + ? Nullable.GetUnderlyingType(objectType) + : objectType; if (t == typeof(DateTimeOffset)) { return new DateTimeOffset(d); diff --git a/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs b/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs index 16c6b72b..7528ef86 100644 --- a/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs +++ b/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs @@ -80,17 +80,9 @@ namespace Newtonsoft.Json.Converters /// The object value. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - bool isNullable = ReflectionUtils.IsNullableType(objectType); - - Type t = (isNullable) - ? Nullable.GetUnderlyingType(objectType) - : objectType; - - ReflectionObject reflectionObject = ReflectionObjectPerType.Get(t); - if (reader.TokenType == JsonToken.Null) { - if (!isNullable) + if (!ReflectionUtils.IsNullableType(objectType)) { throw JsonSerializationException.Create(reader, "Cannot convert null value to KeyValuePair."); } @@ -103,6 +95,12 @@ namespace Newtonsoft.Json.Converters ReadAndAssert(reader); + Type t = ReflectionUtils.IsNullableType(objectType) + ? Nullable.GetUnderlyingType(objectType) + : objectType; + + ReflectionObject reflectionObject = ReflectionObjectPerType.Get(t); + while (reader.TokenType == JsonToken.PropertyName) { string propertyName = reader.Value.ToString(); diff --git a/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs b/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs index b6cfc963..1a44938e 100644 --- a/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs +++ b/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs @@ -106,9 +106,6 @@ namespace Newtonsoft.Json.Converters /// The object value. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - bool isNullable = ReflectionUtils.IsNullableType(objectType); - Type t = isNullable ? Nullable.GetUnderlyingType(objectType) : objectType; - if (reader.TokenType == JsonToken.Null) { if (!ReflectionUtils.IsNullableType(objectType)) @@ -119,6 +116,9 @@ namespace Newtonsoft.Json.Converters return null; } + bool isNullable = ReflectionUtils.IsNullableType(objectType); + Type t = isNullable ? Nullable.GetUnderlyingType(objectType) : objectType; + try { if (reader.TokenType == JsonToken.String)