反射 - 考虑数据类型设置对象属性

Kue*_*per 8 .net c# reflection

我已经发现可以使用反射设置属性的值:使用反射设置对象属性

但我的问题是我的数据只存在于字符串中.因此,当然我总是得到一个例外,因为它不是正确的类型.

有没有办法自动尝试将字符串解析为相应的类型(DateTime,int,decimal,float)?

以下是我正在使用的代码:

Type myType = obj.GetType();
PropertyInfo[] props = myType.GetProperties();

foreach (PropertyInfo prop in props)
{
   setProperty(obj, prop, data[prop.Name]);
}
Run Code Online (Sandbox Code Playgroud)

data是一个简单的关联数组,包含数据为字符串.这些数据应该被映射到obj.

Mar*_*ade 15

你可以使用这个Convert类:

   var value = Convert.ChangeType(data[prop.Name], prop.PropertyType);
   setProperty(obj, prop, value);
Run Code Online (Sandbox Code Playgroud)


BFr*_*ree 8

你应该能够使用TypeConverter:

var converter = TypeDescriptor.GetConverter(prop.PropertyType);
var value = converter.ConvertFromString(data[prop.Name]);
setProperty(obj,prop,value);
Run Code Online (Sandbox Code Playgroud)