我在尝试以递归方式将通用函数用于反序列化算法时遇到问题。我正在通过它们的值从 XElement 加载变量。但是,如果它们不是原语,我必须递归地对该对象执行相同的操作。但是,该对象与当前正在处理的对象类型不同。例如,如果我有
class someObject
{
otherObject obj = new otherObject();
}
class otherObject
{
int someInt = 123;
}
反序列化器递归地进入另一个对象。但是,问题是我必须动态更改泛型方法的类型(即,我不知道在编译时它将是什么类型)。算法如下:
public static T deserialize<T>(XNode element)
where T : new()
{
XElement currentNode = (XElement)element;
FieldInfo[] fields = getFields<T>();
T returnValue = new T();
foreach (FieldInfo field in fields)
{
if (field.FieldType.IsPrimitive)
{
field.SetValue(returnValue, currentNode.Element(field.Name).Value);
}
else
{
//The issue is on the following line
field.SetValue(returnValue, deserialize<???>(currentNode.Element(field.Name).Value));
}
}
}
我看过很多关于如何动态创建类型列表和对象的文档。但是,我找不到任何处理在通用方法调用上动态切换类型的东西。
任何帮助是极大的赞赏!如果我不清楚,请告诉我...