【发布时间】:2019-04-24 16:52:38
【问题描述】:
假设我有一个这样的课程:
public class Class1 {
public int x1;
public Class2 x2;
public double x3;
}
public class Class2 {
public int y1;
private int x2;
}
有没有办法获取Class1的所有可序列化成员的所有类型信息(我认为它的所有公共字段和属性都没有明确声明私有成员)?
例如,我想创建这样一个类型树:
<Class1>
<x1>int</x1>
<x2>Class2</x2>
<Class2>
<y1>int</y1>
</Class2>
<x3>double</x3>
</Class1>
除非该成员是原子类型(如int、double、List 和所有系统定义的类型),否则树将展开。
我的想法
我知道我可以使用reflection 和deep first search 来做这件事。但我发现事情可能会变得复杂,因为类可以是generic class。我担心是否有比generic class 更复杂的情况。
那么有没有比使用reflection 和deep first search 创建这棵树更好的解决方案?
【问题讨论】:
-
当然可以,它会用到反射。但是这里的用例是什么?
-
用例是:我想确保
Class1的定义不会改变,那么Class1的改变意味着只有type和name(如果成员有一个XmlElement属性,那么它的名字应该是所有serializable成员的ElementName)不会改变。所以我想存储class1的所有类型和名称信息。 -
Reflection 非常适合您的需求。你为什么不使用它?泛型类的复杂性是什么?
-
@Caesium 哦,所以这是为了阻止肮脏的小手指改变课程。将其放入程序集或发布中的 nuget 中。无论如何,我认为您的问题是在反映和输出泛型类型参数时如何处理泛型类型
-
@TheGeneral 我不知道是什么意思,把它放在一个组件中......你能说清楚吗?
标签: c# generics recursion serialization reflection