/// <summary>
/// 将value转换为目标类型
/// 并将转换所得的值放到result
/// 如果不支持转换,则返回false
/// </summary>
/// <param name="converter">转换器实例</param>
/// <param name="value">要转换的值</param>
/// <param name="targetType">转换的目标类型</param>
/// <param name="result">转换结果</param>
/// <returns>如果不支持转换,则返回false</returns>
public virtual bool Convert(Converter converter, object value, Type targetType, out object result)
{
var dynamicObject = value as DynamicObject;
if (dynamicObject == null)
{
result = null;
return false;
}
var instance = Activator.CreateInstance(targetType);
var setters = PropertySetter.GetPropertySetters(targetType);
foreach (var set in setters)
{
object targetValue;
if (this.TryGetValue(dynamicObject, set.Name, out targetValue) == true)
{
targetValue = converter.Convert(targetValue, set.Type);
set.SetValue(instance, targetValue);
}
}
result = instance;
return true;
}