假设我有这样一个课:
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
创建此树更好的解决方案吗?
答案 0 :(得分:1)
没有现成的方法可以做到这一点,并且没有太多的界限,只有泛型,有简单的方法来获取泛型类型参数,您将必须递归它们。
但是我认为您正在尝试以错误的方式解决此问题。
如果我对您的理解正确,则希望避免序列化问题。我会从另一个角度来看这个问题。
更新
用户拥有需要序列化的类。
我使用XmlSerializer对其进行序列化和反序列化。
我要解决的问题是:
- 首先,用户像上面一样定义Class1,它是 部署到机器A和机器B。
- 然后用户添加了一个公开的 字段x进入Class1,机器A的部署比B快。 机器A确认新添加的x。但是机器B的部署是 比较慢,所以机器B不知道x,那么序列化将中断 用于机器B。
- 所以现在我要确保不再更改 类传递给我的序列化器。
然后您需要反思,没有我能想到的库可以满足您的需求。您将不得不深入研究通用类型并重新使用,故事结束
答案 1 :(得分:0)
我相信FormatterServices.GetSerializableMembers将返回所有可序列化的成员,就像您在问题中最初提出的那样。