我正在尝试构建一个UI,它允许我获取一个未知定义类的类(将有一个已定义类的库,但它们可以有任何结构,代码需要一般处理所有这些) ,为填充构建输入字段,然后将输入字段保存回对象。
示例对象是这样的:
// This is the class which will be pulled apart and put back together with the new values...
public class Level1()
{
public Level1() {}
public Level2 Level2NestedClass1 {get;set;}
public Level2 Level2NestedClass2 {get;set;}
public string SomeText {get;set;}
}
// This class is nested within Level1
public class Level2()
{
public Level2() {}
public Level3 Level3NestedClass {get;set;}
public bool SomeBool {get;set;}
}
// This class is nested within Level2
public class Level3()
{
public Level3() {}
public string SomeMoreText {get;set;}
}
我设法创建输入字段并保存Level1
上的任何属性以及Level2
上的任何属性的值,但我无法在链中获得任何进一步的信息。那。理想情况下,它需要任意扩展。
我遇到的问题是我无法找到一种方法来获取嵌套属性并在我的“父”类(Level1
)上设置值,因为它们实际存储在{{1}上}。 e.g。
Level2
我无法弄清楚如何从Level1拉出Level2,这样我就可以使用它来递归循环到顶层并按我的方式设置对象,例如设置// This gets me the value of Level2 on Level1 so that I can set it
level1.GetType().GetProperty(level2.Name, BindingFlags.Public | BindingFlags.Instance)?.GetValue(level1)
上的所有值,然后在Level3
上设置Level3
,然后在Level2
设置Level2
,以便在对象上保留完整的嵌套值。端。
如果我使用Level1
来获取Activator.CreateInstance
的实例,我将丢失我设置的所有先前值,并且只保存最后一个项目集。 e.g。
Level2
任何可能有用的提示或套餐都将受到赞赏。我已经看过谷歌和stackoverflow,但我发现的每个例子都使用已知的定义和面包屑样式查找,例如Level1.Level2.Level3虽然直到运行时我才知道定义 - 我想我可以在类中添加属性来定义面包屑并使用它们吗?