private XElement MakeBaseElement(XElement insertionLocation, XName name, object value, out bool alreadyAdded)
{
alreadyAdded = false;
if (value == null || ReflectionUtils.IsBasicType(value.GetType()))
{
if (value != null)
value = value.ToXmlValue();
return new XElement(name, value);
}
else if (ReflectionUtils.IsStringConvertibleIFormattable(value.GetType()))
{
object elementValue = value.GetType().InvokeMember("ToString", BindingFlags.InvokeMethod, null, value, new object[0]);
return new XElement(name, elementValue);
}
else
{
var ser = NewInternalSerializer(value.GetType(), name.Namespace, insertionLocation);
XElement elem = ser.SerializeBase(value, name);
FinalizeNewSerializer(ser, true);
alreadyAdded = true;
return elem;
}
}