逆シリアル化アルゴリズムに汎用関数を再帰的に使用しようとすると問題が発生します。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));
}
}
}
型付きリストとオブジェクトを動的に作成する方法に関するドキュメントをたくさん見てきました。ただし、ジェネリック メソッド呼び出しで型を動的に切り替えることを扱うものは見つかりません。
どんな助けでも大歓迎です!明確でない場合はお知らせください...