我有一个JObject,我从一个代表自定义对象的调整器的一个JSON字符串反序列化,调整器。
然后我将该对象与数据库中已存在的对象合并以创建更新的对象。我这样做是通过反射循环遍历属性并将它们分配给属性名称匹配。
我的问题是JValue无法隐式转换为目标类型,我必须手动转换它。 有没有办法可以动态转换对象?我可以获得需要转换为的类型。
这是我的Model Binder:
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
JObject jsonObj = JsonConvert.DeserializeObject(actionContext.Request.Content.ReadAsStringAsync().Result) as JObject;
Adjuster dbAdjuster = new Adjuster();
Type adjType = dbAdjuster.GetType();
PropertyInfo[] props = adjType.GetProperties();
dbAdjuster = AdjusterFactory.GetAdjuster(Convert.ToInt32(jsonObj["ID"].ToString()));
foreach (var prop in jsonObj.Properties() )
{
foreach (PropertyInfo info in props)
{
if (prop.Name == info.Name && prop.Name != "ID")
{
if (info.GetValue(dbAdjuster) is string)
{
info.SetValue(dbAdjuster, Convert.ToString(prop.Value));
break;
}
//continue for every type
}
else
{
break;
}
}
}
bindingContext.Model = dbAdjuster;
return true;
}
答案 0 :(得分:4)
您可以使用Convert.ChangeType
这样做:
property.SetValue(item, Convert.ChangeType(valueToConvert, property.PropertyType));
答案 1 :(得分:1)
请参阅:Generic type conversion FROM string
TConverter.ChangeType<T>(StringValue);
public static class TConverter
{
public static T ChangeType<T>(object value)
{
return (T)ChangeType(typeof(T), value);
}
public static object ChangeType(Type t, object value)
{
TypeConverter tc = TypeDescriptor.GetConverter(t);
return tc.ConvertFrom(value);
}
public static void RegisterTypeConverter<T, TC>() where TC : TypeConverter
{
TypeDescriptor.AddAttributes(typeof(T), new TypeConverterAttribute(typeof(TC)));
}
}