private XElement AddObjectToElement(XElement elem, XName alias, object obj)
{
UdtWrapper udt = null;
if (obj != null)
udt = TypeWrappersPool.Pool.GetTypeWrapper(obj.GetType(), this);
if (alias == null && udt != null)
alias = udt.Alias.OverrideNsIfEmpty(TypeNamespace);
XElement elemToAdd = null;
if (udt != null && udt.IsTreatedAsDictionary)
{
elemToAdd = MakeDictionaryElement(elem, alias, obj, null, null);
if(elemToAdd.Parent != elem)
elem.Add(elemToAdd);
}
else if (udt != null && udt.IsTreatedAsCollection)
{
elemToAdd = MakeCollectionElement(elem, alias, obj, null, null);
if(elemToAdd.Parent != elem)
elem.Add(elemToAdd);
}
else if (udt != null && udt.IsEnum)
{
bool alreadyAdded;
elemToAdd = MakeBaseElement(elem, alias, udt.EnumWrapper.GetAlias(obj), out alreadyAdded);
if (!alreadyAdded)
elem.Add(elemToAdd);
}
else
{
bool alreadyAdded;
elemToAdd = MakeBaseElement(elem, alias, obj, out alreadyAdded);
if (!alreadyAdded)
elem.Add(elemToAdd);
}
return elemToAdd;
}