Если я вас правильно понимаю, возможно, что-то подобное поможет:
static void AssignAllComplexTypeMembers(object instance, ComplexType value)
{
// If instance itself is null it has no members to which we can assign a value
if (instance != null)
{
// Get all fields that are non-static in the instance provided...
FieldInfo[] fields = instance.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (FieldInfo field in fields)
{
if (field.FieldType == typeof(ComplexType))
{
// If field is of type ComplexType we assign the provided value to it.
field.SetValue(instance, value);
}
else if (field.FieldType.IsClass)
{
// Otherwise, if the type of the field is a class recursively do this assignment
// on the instance contained in that field. (If null this method will perform no action on it)
AssignAllComplexTypeMembers(field.GetValue(instance), value);
}
}
}
}
И этот метод будет называться как:
foreach (var instance in data.obj)
AssignAllComplexTypeMembers(instance, t);
Этот код, конечно, работает только для полей. Если вам также нужны свойства, вам нужно будет выполнить цикл по всем свойствам (который можно получить с помощью instance.GetType().GetProperties(...)
).
Имейте в виду, что это отражение не особенно эффективно.