/// Get and set values for a <see cref="MemberInfo"/> Enum using reflection.
/// </summary>
privateclassEnumValueProvider:IValueProvider
{
privateTypem_enumType;
privateMemberInfom_member;
/// <summary>
/// Initializes a new instance of the <see cref="EnumValueProvider"/> class.
/// </summary>
/// <param name="pi">The property info.</param>
publicEnumValueProvider(MemberInfomi)
{
if(mi==null)
thrownewArgumentNullException("mi");
if(mi.MemberType==MemberTypes.Property)
m_enumType=((PropertyInfo)mi).PropertyType;
elseif(mi.MemberType==MemberTypes.Field)
m_enumType=((FieldInfo)mi).FieldType;
else
thrownewArgumentException(string.Format("MemberInfo '{0}' must be of type FieldInfo or PropertyInfo",CultureInfo.InvariantCulture,m_member.Name,"member"));
m_member=mi;
}
/// <summary>
/// Sets the value.
/// </summary>
/// <param name="target">The target to set the value on.</param>
/// <param name="value">The value to set on the target.</param>
thrownewArgumentException(string.Format("MemberInfo '{0}' must be of type FieldInfo or PropertyInfo",CultureInfo.InvariantCulture,m_member.Name,"member"));
}
}
catch(Exceptionex)
{
thrownewJsonSerializationException(string.Format("Error setting value to '{0}' on '{1}'.",CultureInfo.InvariantCulture,m_member.Name,(target==null?"null":target.GetType().FullName)),ex);
}
}
/// <summary>
/// Gets the value.
/// </summary>
/// <param name="target">The target to get the value from.</param>
thrownewArgumentException(string.Format("MemberInfo '{0}' must be of type FieldInfo or PropertyInfo",CultureInfo.InvariantCulture,m_member.Name,"member"));
}
}
catch(Exceptionex)
{
thrownewJsonSerializationException(string.Format("Error getting value to '{0}' on '{1}'.",CultureInfo.InvariantCulture,m_member.Name,(target==null?"null":target.GetType().FullName)),ex);