У меня есть JObject, который я десериализую из строки JSON из HTTP-сообщения, представляющего пользовательский объект Adjuster.Динамически конвертировать объект по типу свойства
Затем я объединяю этот объект с тем, что уже существует в базе данных для создания обновленного объекта. Я делаю это с отражением, перебирающим свойства и назначающим их там, где имена свойств совпадают.
Проблема заключается в том, что JValue не может быть неявно преобразован в тип адресата, мне нужно его вручную преобразовать. Есть ли способ, которым я могу динамически конвертировать объекты? Я могу получить тип, который нужно будет преобразовать.
Вот моя модель 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;
}
AutoMapper имеет интерфейс для 'TypeConverter', это помогает? https://github.com/AutoMapper/AutoMapper/wiki/Custom-type-converters – Eris