in Darabonba/Utils/XmlUtils.cs [281:327]
private static void GetXmlFactory(object obj, XElement element, XElement xParent = null)
{
if (obj == null)
{
return;
}
Type type = obj.GetType();
if (typeof(IList).IsAssignableFrom(type))
{
if (xParent == null)
{
throw new ArgumentException("unsupported nest list.");
}
IList list = (IList)obj;
string nodeName = element.Name.LocalName;
for (int j = 0; j < list.Count; j++)
{
XElement xNode = new XElement(nodeName);
GetXmlFactory(list[j], xNode);
xParent.Add(xNode);
}
return;
}
if (typeof(Model).IsAssignableFrom(type))
{
GetXml((Model)obj, element);
}
else if (typeof(IDictionary).IsAssignableFrom(type))
{
Dictionary<string, object> newDict = CastDict((IDictionary)obj)
.ToDictionary(entry => (string)entry.Key, entry => entry.Value);
GetXml(newDict, element);
}
else
{
element.Add(obj);
}
if (xParent != null)
{
xParent.Add(element);
}
}