Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }