private Type GetType(JObject jObject, Type parentType, JsonSerializer serializer) { Type targetType = parentType; JsonSubtypes lastTypeResolver = null; JsonSubtypes currentTypeResolver = this; var visitedTypes = new HashSet <Type> { targetType }; var jsonConverterCollection = serializer.Converters.OfType <JsonSubtypesConverter>().ToList(); while (currentTypeResolver != null && currentTypeResolver != lastTypeResolver) { targetType = currentTypeResolver.ResolveType(jObject, targetType, serializer); if (!visitedTypes.Add(targetType)) { break; } lastTypeResolver = currentTypeResolver; jsonConverterCollection = jsonConverterCollection.Where(c => c != currentTypeResolver).ToList(); currentTypeResolver = GetTypeResolver(ToTypeInfo(targetType), jsonConverterCollection); } return(targetType); }
private Type GetType(JObject jObject, Type parentType, JsonSerializer serializer) { Type targetType = parentType; JsonSubtypes lastTypeResolver = null; JsonSubtypes currentTypeResolver = this; var jsonConverterCollection = serializer.Converters.OfType <JsonSubtypesConverter>().ToList(); while (currentTypeResolver != null && currentTypeResolver != lastTypeResolver) { targetType = currentTypeResolver.GetType(jObject, targetType); lastTypeResolver = currentTypeResolver; jsonConverterCollection = jsonConverterCollection.Where(c => c != currentTypeResolver).ToList(); currentTypeResolver = GetTypeResolver(ToTypeInfo(targetType), jsonConverterCollection); } return(targetType); }