@@ -74,11 +74,11 @@ public override object ReadJson(
74
74
if ( tokenType == JsonToken . StartArray )
75
75
{
76
76
var unwrappedType = type . GetUnderlyingTypeFromNullable ( ) ;
77
- argument = ReadJsonArray ( token , unwrappedType ) ;
77
+ argument = ReadJsonArray ( token , unwrappedType , serializer ) ;
78
78
}
79
79
else
80
80
{
81
- argument = ParseTokenArguments ( token , tokenType , type , value ) ;
81
+ argument = ParseTokenArguments ( token , tokenType , type , value , serializer ) ;
82
82
}
83
83
}
84
84
else
@@ -92,7 +92,7 @@ public override object ReadJson(
92
92
var type = mainType . GenericTypeArguments [ i ] ;
93
93
var unwrappedType = type . GetUnderlyingTypeFromNullable ( ) ;
94
94
// only read as many items as there are tokens left
95
- var args = ReadJsonArray ( token , unwrappedType , count - total ) ;
95
+ var args = ReadJsonArray ( token , unwrappedType , serializer , count - total ) ;
96
96
97
97
if ( args != null && args . Count > 0 )
98
98
{
@@ -120,7 +120,7 @@ public override object ReadJson(
120
120
121
121
try
122
122
{
123
- var args = ParseTokenArguments ( token , tokenType , type , value ) ;
123
+ var args = ParseTokenArguments ( token , tokenType , type , value , serializer ) ;
124
124
125
125
if ( args != null )
126
126
{
@@ -222,7 +222,7 @@ public virtual void WriteObject(JsonWriter writer, object value, JsonSerializer
222
222
serializer . Serialize ( writer , value ) ;
223
223
}
224
224
225
- private static object ParseTokenArguments ( JToken token , JsonToken tokenType , Type type , object value )
225
+ private static object ParseTokenArguments ( JToken token , JsonToken tokenType , Type type , object value , JsonSerializer serializer )
226
226
{
227
227
const string SCHEMA_ORG = "http://schema.org/" ;
228
228
const int SCHEMA_ORG_LENGTH = 18 ; // equivalent to "http://schema.org/".Length
@@ -241,42 +241,42 @@ private static object ParseTokenArguments(JToken token, JsonToken tokenType, Typ
241
241
{
242
242
if ( tokenType == JsonToken . StartObject )
243
243
{
244
- args = ParseTokenObjectArguments ( token , type , unwrappedType ) ;
244
+ args = ParseTokenObjectArguments ( token , type , unwrappedType , serializer ) ;
245
245
}
246
246
else
247
247
{
248
- args = ParseTokenValueArguments ( token , tokenType , type , unwrappedType , value ) ;
248
+ args = ParseTokenValueArguments ( token , tokenType , type , unwrappedType , value , serializer ) ;
249
249
}
250
250
}
251
251
252
252
return args ;
253
253
}
254
254
255
- private static object ParseTokenObjectArguments ( JToken token , Type type , Type unwrappedType )
255
+ private static object ParseTokenObjectArguments ( JToken token , Type type , Type unwrappedType , JsonSerializer serializer )
256
256
{
257
257
object args = null ;
258
258
var typeName = GetTypeNameFromToken ( token ) ;
259
259
if ( string . IsNullOrEmpty ( typeName ) )
260
260
{
261
- args = token . ToObject ( unwrappedType ) ;
261
+ args = token . ToObject ( unwrappedType , serializer ) ;
262
262
}
263
263
else if ( typeName == type . Name )
264
264
{
265
- args = token . ToObject ( type ) ;
265
+ args = token . ToObject ( type , serializer ) ;
266
266
}
267
267
else
268
268
{
269
269
var builtType = Type . GetType ( $ "{ NamespacePrefix } { typeName } ") ;
270
270
if ( builtType != null && type . GetTypeInfo ( ) . IsAssignableFrom ( builtType . GetTypeInfo ( ) ) )
271
271
{
272
- args = token . ToObject ( builtType ) ;
272
+ args = token . ToObject ( builtType , serializer ) ;
273
273
}
274
274
}
275
275
276
276
return args ;
277
277
}
278
278
279
- private static object ParseTokenValueArguments ( JToken token , JsonToken tokenType , Type type , Type unwrappedType , object value )
279
+ private static object ParseTokenValueArguments ( JToken token , JsonToken tokenType , Type type , Type unwrappedType , object value , JsonSerializer serializer )
280
280
{
281
281
object args = null ;
282
282
if ( unwrappedType . IsPrimitiveType ( ) )
@@ -429,7 +429,7 @@ private static object ParseTokenValueArguments(JToken token, JsonToken tokenType
429
429
{
430
430
if ( ! type . GetTypeInfo ( ) . IsInterface && ! type . GetTypeInfo ( ) . IsClass )
431
431
{
432
- args = token . ToObject ( classType ) ; // This is expected to throw on some case
432
+ args = token . ToObject ( classType , serializer ) ; // This is expected to throw on some case
433
433
}
434
434
}
435
435
}
@@ -454,7 +454,7 @@ private static Type ToClass(Type type)
454
454
return type ;
455
455
}
456
456
457
- private static IList ReadJsonArray ( JToken token , Type type , int ? count = null )
457
+ private static IList ReadJsonArray ( JToken token , Type type , JsonSerializer serializer , int ? count = null )
458
458
{
459
459
var classType = ToClass ( type ) ;
460
460
var listType = typeof ( List < > ) . MakeGenericType ( type ) ; // always read into list of interfaces
@@ -472,7 +472,7 @@ private static IList ReadJsonArray(JToken token, Type type, int? count = null)
472
472
var typeName = GetTypeNameFromToken ( childToken ) ;
473
473
if ( string . IsNullOrEmpty ( typeName ) )
474
474
{
475
- var child = childToken . ToObject ( classType ) ;
475
+ var child = childToken . ToObject ( classType , serializer ) ;
476
476
var method = listType . GetRuntimeMethod ( nameof ( List < object > . Add ) , new [ ] { classType } ) ;
477
477
478
478
if ( method != null )
@@ -487,7 +487,7 @@ private static IList ReadJsonArray(JToken token, Type type, int? count = null)
487
487
var builtType = Type . GetType ( $ "{ NamespacePrefix } { typeName } ") ;
488
488
if ( builtType != null && type . GetTypeInfo ( ) . IsAssignableFrom ( builtType . GetTypeInfo ( ) ) )
489
489
{
490
- var child = ( Thing ) childToken . ToObject ( builtType ) ;
490
+ var child = ( Thing ) childToken . ToObject ( builtType , serializer ) ;
491
491
var method = listType . GetRuntimeMethod ( nameof ( List < object > . Add ) , new [ ] { classType } ) ;
492
492
493
493
if ( method != null )
0 commit comments