t", data, doc));
}
return element;
}
/// <summary>
/// 创建动态类型的xml
/// </summary>
/// <param name="name"></param>
/// <param name="data"></param>
/// <param name="doc"></param>
/// <returns></returns>
private static XmlElement GetDynamicXml(string name, dynamic data, XmlDocument doc)
{
if (data == null)
return null;
var element = doc.CreateElement(name);
element.SetAttribute("Type", "dynamic");
element.SetAttribute("Classify", Classify.Dynamic.ToString());
foreach (DictionaryEntry item in (IDictionary)data.Dictionary)
{
var child = doc.CreateElement("Element");
child.AppendChild(GetXml("Key", item.Key ?? string.Empty, doc));
child.AppendChild(GetXml("Value", item.Value ?? string.Empty, doc));
element.AppendChild(child);
}
return element;
}
/// <summary>
/// 创建字典类型的xml
/// </summary>
/// <param name="name"></param>
/// <param name="datas"></param>
/// <param name="doc"></param>
/// <returns></returns>
private static XmlElement GetIDictionaryXml(string name, object datas, XmlDocument doc)
{
if (datas == null)
return null;
var element = doc.CreateElement(name);
element.SetAttribute("Type", typeof(IDictionary).FullName);
element.SetAttribute("Classify", Classify.Dictionary.ToString());
element.SetAttribute("KeyGenericAssembly", datas.GetType().GetGenericArguments()[0].Assembly.FullName);
element.SetAttribute("KeyGenericType", datas.GetType().GetGenericArguments()[0].FullName);
element.SetAttribute("ValueGenericAssembly", datas.GetType().GetGenericArguments()[1].Assembly.FullName);
element.SetAttribute("ValueGenericType", datas.GetType().GetGenericArguments()[1].FullName);
foreach (DictionaryEntry data in (IDictionary)datas)
{
var child = doc.CreateElement("Element");
child.AppendChild(GetXml("Key", data.Key ?? string.Empty, doc));
child.AppendChild(GetXml("Value", data.Value ?? string.Empty, doc));
element.AppendChild(child);
}
return element;
}
/// <summary>
/// 创建自定义类
/// </summary>
/// <param name="name"></param>
/// <param name="data"></param>
/// <param name="doc"></param>
/// <returns></returns>
private static XmlElement GetCustomXml(string name, object data, XmlDocument doc)
{
if (data == null)
return null;
var element = doc.CreateElement(name);
element.SetAttribute("Assembly",MetaDataManager.Assembly.GetAssemblySortName(data.GetType().Assembly));
element.SetAttribute("Type", data.GetType().FullName);
element.SetAttribute("Classify", Classify.Custom.ToString());
data.GetType().GetProperties().ForEach(property =>
{
var item = GetXml(property.Name, property.GetValue(data), doc);
if (item != null)
element.AppendChild(item);
});
return element;
} |