<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />

Newtonsoft.Json.Utilities.ReflectionUtils

static class ReflectionUtils
namespace Newtonsoft.Json.Utilities { internal static class ReflectionUtils { public static readonly Type[] EmptyTypes; public static bool IsVirtual(this PropertyInfo propertyInfo); public static MethodInfo GetBaseDefinition(this PropertyInfo propertyInfo); public static bool IsPublic(PropertyInfo property); public static Type GetObjectType(object v); public static string GetTypeName(Type t, TypeNameAssemblyFormatHandling assemblyFormat, ISerializationBinder binder); public static bool HasDefaultConstructor(Type t, bool nonPublic); public static ConstructorInfo GetDefaultConstructor(Type t); public static ConstructorInfo GetDefaultConstructor(Type t, bool nonPublic); public static bool IsNullable(Type t); public static bool IsNullableType(Type t); public static Type EnsureNotNullableType(Type t); public static bool IsGenericDefinition(Type type, Type genericInterfaceDefinition); public static bool ImplementsGenericDefinition(Type type, Type genericInterfaceDefinition); public static bool ImplementsGenericDefinition(Type type, Type genericInterfaceDefinition, out Type implementingType); public static bool InheritsGenericDefinition(Type type, Type genericClassDefinition); public static bool InheritsGenericDefinition(Type type, Type genericClassDefinition, out Type implementingType); public static Type GetCollectionItemType(Type type); public static void GetDictionaryKeyValueTypes(Type dictionaryType, out Type keyType, out Type valueType); public static Type GetMemberUnderlyingType(MemberInfo member); public static bool IsIndexedProperty(MemberInfo member); public static bool IsIndexedProperty(PropertyInfo property); public static object GetMemberValue(MemberInfo member, object target); public static void SetMemberValue(MemberInfo member, object target, object value); public static bool CanReadMemberValue(MemberInfo member, bool nonPublic); public static bool CanSetMemberValue(MemberInfo member, bool nonPublic, bool canSetReadOnly); public static List<MemberInfo> GetFieldsAndProperties(Type type, BindingFlags bindingAttr); public static T GetAttribute<T>(object attributeProvider) where T : Attribute; public static T GetAttribute<T>(object attributeProvider, bool inherit) where T : Attribute; public static T[] GetAttributes<T>(object attributeProvider, bool inherit) where T : Attribute; public static Attribute[] GetAttributes(object provider, Type attributeType, bool inherit); public static TypeNameKey SplitFullyQualifiedTypeName(string fullyQualifiedTypeName); public static MemberInfo GetMemberInfoFromType(Type targetType, MemberInfo memberInfo); public static IEnumerable<FieldInfo> GetFields(Type targetType, BindingFlags bindingAttr); public static IEnumerable<PropertyInfo> GetProperties(Type targetType, BindingFlags bindingAttr); public static BindingFlags RemoveFlag(this BindingFlags bindingAttr, BindingFlags flag); public static bool IsMethodOverridden(Type currentType, Type methodDeclaringType, string method); public static object GetDefaultValue(Type type); } }