private object ConvertToArray(Type desiredType, String key, Node node, out bool conversionSucceeded)
{
Type elemType = desiredType.GetElementType();
if (node == null)
{
conversionSucceeded = false;
return Array.CreateInstance(elemType, 0);
}
else if (node.NodeType == NodeType.Leaf)
{
LeafNode leafNode = node as LeafNode;
return Converter.Convert(desiredType, leafNode.ValueType, leafNode.Value, out conversionSucceeded);
}
else if (node.NodeType == NodeType.Indexed)
{
IndexedNode indexedNode = node as IndexedNode;
if (IsSimpleProperty(elemType))
{
return ConvertFlatNodesToArray(desiredType, indexedNode.ChildNodes, out conversionSucceeded);
}
else
{
return ConvertComplexNodesToArray(desiredType, indexedNode, out conversionSucceeded);
}
}
else
{
throw new BindingException("Could not convert param to array as the node related " +
"to the param is not a leaf node nor an indexed node. Key {0}", key);
}
}