object GetObjectOfTypeFromNode(Type t, XmlNode node)
{
if (t.IsSimpleType() || t == typeof(Uri) || t.IsNullableType())
{
return GetPropertyValue(t, node);
}
if (typeof(IEnumerable).IsAssignableFrom(t))
{
return GetPropertyValue(t, node);
}
var result = mapper.CreateInstance(t);
foreach (XmlNode n in node.ChildNodes)
{
Type type = null;
if (n.Name.Contains(":"))
{
type = Type.GetType($"System.{n.Name.Substring(0, n.Name.IndexOf(":"))}", false, true);
}
var prop = GetProperty(t, n.Name);
if (prop != null)
{
var val = GetPropertyValue(type ?? prop.PropertyType, n);
if (val != null)
{
var propertySet = DelegateFactory.CreateSet(prop);
propertySet.Invoke(result, val);
continue;
}
}
var field = GetField(t, n.Name);
if (field != null)
{
var val = GetPropertyValue(type ?? field.FieldType, n);
if (val != null)
{
var fieldSet = DelegateFactory.CreateSet(field);
fieldSet.Invoke(result, val);
}
}
}
return result;
}