public static ClassType GetClassType(Type type, JsonSerializerOptions options) { Debug.Assert(type != null); if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>)) { type = Nullable.GetUnderlyingType(type); } if (type == typeof(object)) { return(ClassType.Unknown); } if (options.HasConverter(type)) { return(ClassType.Value); } if (DefaultImmutableDictionaryConverter.IsImmutableDictionary(type) || IsDeserializedByConstructingWithIDictionary(type)) { return(ClassType.IDictionaryConstructible); } if (typeof(IDictionary).IsAssignableFrom(type) || (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(IDictionary <,>) || type.GetGenericTypeDefinition() == typeof(IReadOnlyDictionary <,>)))) { return(ClassType.Dictionary); } if (typeof(IEnumerable).IsAssignableFrom(type)) { return(ClassType.Enumerable); } return(ClassType.Object); }