我一直在寻求通过指定一个基本数据模型来使我的应用程序更具可扩展性,我打算将其作为一个容器,以便发送到另一个应用程序的数据总是正确的结构。简单的方法将对象值复制到另一个类型的对象?
但是我希望将来能够轻松地从XML和数据库等来源加载数据,所以我想知道如何去将一个对象的值复制到基本数据模型对象,其中对象im复制值可能不是相同的结构(所以我主要只是想匹配属性名称)。
这里是我的尝试:
public Dictionary<string, object> ObjectValues(object source)
{
if(source == null)
return null;
Dictionary<string, object> properties = new Dictionary<string, object>();
foreach (PropertyInfo propInfo in source.GetType().GetProperties())
{
try
{
object value = propInfo.GetValue(source, null);
properties.Add(propInfo.Name, value);
if (!value.GetType().IsPrimitive && !value.GetType().IsValueType)
{
Dictionary<string, object> internalProperties = ProxyValues(value);
if (internalProperties != null)
foreach (KeyValuePair<string, object> internalProp in internalProperties)
properties.Add(String.Format("{0}.{1}", propInfo.Name, internalProp.Key), internalProp.Value);
}
}
catch (TargetParameterCountException) { }
}
return properties;
}
谢谢, 亚历克斯。
如果数据是重物,数据模型和反射将会起作用。如果您依赖大量简单的数据(如数以万计的字符串或整数),则由于反射,您会注意到性能下降。 – 2011-06-15 01:01:05
如果我正在阅读这个权利你有一个'BasePocoClass',它有一个定义好的结构,并且你想把它转换成'PocoClass1','PocoClass2'和'PocoClassX',它们都有不同的结构? – 2011-06-15 01:02:32
@Marino Simic约50/50,大量复杂类型和大量简单类型。 – 2011-06-15 01:22:59