ReflectionDelegateFactory
using Newtonsoft.Json.Serialization;
using System;
using System.Globalization;
using System.Reflection;
namespace Newtonsoft.Json.Utilities
{
internal abstract class ReflectionDelegateFactory
{
public Newtonsoft.Json.Serialization.Func<T, object> CreateGet<T>(MemberInfo memberInfo)
{
PropertyInfo propertyInfo;
if ((object)(propertyInfo = (memberInfo as PropertyInfo)) != null) {
if (propertyInfo.PropertyType.IsByRef)
throw new InvalidOperationException("Could not create getter for {0}. ByRef return values are not supported.".FormatWith(CultureInfo.InvariantCulture, propertyInfo));
return CreateGet<T>(propertyInfo);
}
FieldInfo fieldInfo;
if ((object)(fieldInfo = (memberInfo as FieldInfo)) != null)
return CreateGet<T>(fieldInfo);
throw new Exception("Could not create getter for {0}.".FormatWith(CultureInfo.InvariantCulture, memberInfo));
}
public Newtonsoft.Json.Serialization.Action<T, object> CreateSet<T>(MemberInfo memberInfo)
{
PropertyInfo propertyInfo;
if ((object)(propertyInfo = (memberInfo as PropertyInfo)) != null)
return CreateSet<T>(propertyInfo);
FieldInfo fieldInfo;
if ((object)(fieldInfo = (memberInfo as 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 ObjectConstructor<object> CreateParameterizedConstructor(MethodBase method);
public abstract Newtonsoft.Json.Serialization.Func<T> CreateDefaultConstructor<T>(Type type);
public abstract Newtonsoft.Json.Serialization.Func<T, object> CreateGet<T>(PropertyInfo propertyInfo);
public abstract Newtonsoft.Json.Serialization.Func<T, object> CreateGet<T>(FieldInfo fieldInfo);
public abstract Newtonsoft.Json.Serialization.Action<T, object> CreateSet<T>(FieldInfo fieldInfo);
public abstract Newtonsoft.Json.Serialization.Action<T, object> CreateSet<T>(PropertyInfo propertyInfo);
}
}