最近在做个项目,采集数据入库,数据库表字段采用V01,V02,....,V120,另外有一张DataStyle表对应V01等代表采集来字段。
需要根据传过来的字段通过Dictionary找到对应的V字段,在Model类对象中赋值,考虑采用反射来实现。
///
/// 获取类中的属性值
///
///
///
///
public string GetModelValue(string FieldName, object obj)
{
try
{
Type Ts = obj.GetType();
object o = Ts.GetProperty(FieldName).GetValue(obj, null);
string Value = Convert.ToString(o);
if (string.IsNullOrEmpty(Value)) return null;
return Value;
}
catch
{
return null;
}
}
///
/// 设置类中的属性值
///
///
///
///
public bool SetModelValue(string FieldName,string Value, object obj)
{
try
{
Type Ts = obj.GetType();
object v = Convert.ChangeType(Value, Ts.GetProperty(FieldName).PropertyType);
Ts.GetProperty(FieldName).SetValue(obj, v, null);
return true;
}
catch
{
return false;
}
}
采用一行代码
foreach (KeyValuePair<string, string> pair in datastylemap)
{
object v = ValueParse(packString, pair.Key);
if (v != null)
{
minDataModel.GetType().GetProperty(pair.Value).SetValue(minDataModel, Convert.ToDecimal(v), null);
}
}
参考: