设为首页 加入收藏

TOP

动态类型序列化(四)
2019-09-17 18:55:11 】 浏览:113
Tags:动态 类型 序列化
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
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇理解依赖注入和控制反转 下一篇RefulApi自动化测试~Hitchhiker的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目