internal void WriteInstance(MemberDefinition definition, Type propertyType, object node)
{
if (definition.ArraySize == 0)
{
WriteElement(definition, propertyType, node);
return;
}
if (propertyType.IsArray)
{
// If the property is a native array (ie. SomeType[]), create an array instance and set its values
var elementType = propertyType.GetElementType();
Array arr = node as Array;
Debug.Assert(arr.Length == definition.ArraySize);
for (int i = 0; i < definition.ArraySize; i++)
{
WriteElement(definition, elementType, arr.GetValue(i));
}
}
else
{
// For non-native arrays we always assume the property is an IList<T>
var items = node as System.Collections.IList;
var elementType = items.GetType().GetGenericArguments().Single();
foreach (var element in items)
{
WriteElement(definition, elementType, element);
}
}
}