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

ReflectionDelegateFactory

abstract class ReflectionDelegateFactory
using System; using System.Globalization; using System.Reflection; namespace Newtonsoft.Json.Utilities { internal abstract class ReflectionDelegateFactory { public Func<T, object> CreateGet<T>(MemberInfo memberInfo) { PropertyInfo propertyInfo = memberInfo as PropertyInfo; if ((object)propertyInfo != null) return CreateGet<T>(propertyInfo); FieldInfo fieldInfo = memberInfo as FieldInfo; if ((object)fieldInfo != null) return CreateGet<T>(fieldInfo); throw new Exception("Could not create getter for {0}.".FormatWith(CultureInfo.InvariantCulture, memberInfo)); } public Action<T, object> CreateSet<T>(MemberInfo memberInfo) { PropertyInfo propertyInfo = memberInfo as PropertyInfo; if ((object)propertyInfo != null) return CreateSet<T>(propertyInfo); FieldInfo fieldInfo = memberInfo as FieldInfo; if ((object)fieldInfo != null) return CreateSet<T>(fieldInfo); throw new Exception("Could not create setter for {0}.".FormatWith(CultureInfo.InvariantCulture, memberInfo)); } public abstract MethodCall<T, object> CreateMethodCall<T>(MethodBase method); public abstract Func<T> CreateDefaultConstructor<T>(Type type); public abstract Func<T, object> CreateGet<T>(PropertyInfo propertyInfo); public abstract Func<T, object> CreateGet<T>(FieldInfo fieldInfo); public abstract Action<T, object> CreateSet<T>(FieldInfo fieldInfo); public abstract Action<T, object> CreateSet<T>(PropertyInfo propertyInfo); } }