me);
if (type == null)
return null;
dynamic obj = Activator.CreateInstance(type, true);
foreach (var element in elements)
{
var property = type.GetProperty(element.Name);
object value;
if (!CoralConvert.Convert(GetValue(element), property.PropertyType, out value))
continue;
property.SetValue(obj, value);
}
return obj;
}
#endregion
#region 创建XmlElement
/// <summary>
/// 创建xml元素
/// </summary>
/// <param name="name"></param>
/// <param name="data"></param>
/// <param name="doc"></param>
/// <returns></returns>
public static XmlElement GetXml(string name, object data, XmlDocument doc)
{
if (data == null)
return null;
if (data.GetType().IsValueType || data is string)
{
return GetValueTypeXml(name, data, doc);
}
var list = data as IList;
if (list != null)
{
return GetIListXml(name, list, doc);
}
var dict = data as IDictionary;
if (dict != null)
{
return GetIDictionaryXml(name, dict, doc);
}
var dynamic = data as DynamicDictionary;
if (dynamic != null)
{
return GetDynamicXml(name, dynamic, doc);
}
return GetCustomXml(name, data, doc);
}
/// <summary>
/// 创建简单类型的xml元素
/// </summary>
/// <param name="name"></param>
/// <param name="data"></param>
/// <param name="doc"></param>
/// <returns></returns>
private static XmlElement GetValueTypeXml(string name, object data, XmlDocument doc)
{
if (data == null)
return null;
var element = doc.CreateElement(name);
element.SetAttribute("Type", data.GetType().FullName);
element.SetAttribute("Assembly", MetaDataManager.Assembly.GetAssemblySortName(data.GetType().Assembly));
element.SetAttribute("Classify", Classify.Sample.ToString());
element.InnerText = data.ToString();
return element;
}
/// <summary>
/// 获取列表类型的xml
/// </summary>
/// <param name="name"></param>
/// <param name="datas"></param>
/// <param name="doc"></param>
/// <returns></returns>
private static XmlElement GetIListXml(string name, object datas, XmlDocument doc)
{
if (datas == null)
return null;
var element = doc.CreateElement(name);
if (datas.GetType().IsArray)
{
element.SetAttribute("Type", typeof(Array).FullName);
element.SetAttribute("Classify", Classify.Array.ToString());
element.SetAttribute("ElementType", datas.GetType().GetElementType().FullName);
element.SetAttribute("ElementAssembly", datas.GetType().GetElementType().Assembly.FullName);
}
else
{
element.SetAttribute("Type", typeof(IList).FullName);
element.SetAttribute("Classify", Classify.List.ToString());
element.SetAttribute("GenericType", datas.GetType().GenericTypeArguments[0].FullName);
element.SetAttribute("GenericAssembly", datas.GetType().GenericTypeArguments[0].Assembly.FullName);
}
foreach (var data in (IList)datas)
{
element.AppendChild(GetXml("Elemen |