C# 对对象的属性进行递归迭代

C# 对对象的属性进行递归迭代,c#,reflection,C#,Reflection,我希望在运行时获取对象的所有属性,并将其与值一起保存在batabase上。我是递归地这样做的,即每当一个属性也在对象上时,我将调用相同的方法并将该属性作为参数传递 请参见下面的我的代码: private void SaveProperties(object entity) { PropertyInfo[] propertyInfos = GetAllProperties(entity); Array.Sort(propertyInfos, del

我希望在运行时获取对象的所有属性,并将其与值一起保存在batabase上。我是递归地这样做的,即每当一个属性也在对象上时,我将调用相同的方法并将该属性作为参数传递

请参见下面的我的代码:

private void SaveProperties(object entity) {

    PropertyInfo[] propertyInfos = GetAllProperties(entity);
    Array.Sort(propertyInfos,
                delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
                { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });

    _CurrentType = entity.GetType().Name;

    foreach (PropertyInfo propertyInfo in propertyInfos) {
        if (propertyInfo.GetValue(entity, null) != null) {
            if (propertyInfo.PropertyType.BaseType != typeof(BaseEntity)) {
                SaveProperty((BaseEntity)entity, propertyInfo);
            }
            else {
                // **here**
                SaveProperties(Activator.CreateInstance(propertyInfo.PropertyType));
            }
        }
    }
}
但是,我当前代码的问题是,我为属性对象创建了一个新实例(请参见重点),从而丢失了原始对象上的所有数据。如何递归地迭代对象的所有属性?这可能吗


请帮忙。提前感谢。

用此替换强调的行:

SaveProperties (propertyInfo.GetValue (entity, null));
我也会这样做,以确保
GetValue()
适用,并避免多次调用它:

object v = propertyInfo.CanRead ?  propertyInfo.GetValue (entity, null) : null;
if (v != null) {
   if (...) {
   } else {
      SaveProperties (v);
   }
}

我会编辑以删除强调,并在行上方放置一条
//注释
。效果很好!谢谢你,伙计!我知道我只是错过了一些东西。一定是因为喝了太多咖啡,睡眠时间太少。