设为首页 加入收藏

TOP

动态类型序列化(二)
2019-09-17 18:55:11 】 浏览:110
Tags:动态 类型 序列化
Classify clasify; Enum.TryParse(element.GetAttribute("Classify"), out clasify); switch (clasify) { case Classify.Sample: return GetSampleva lue(element.GetAttribute("Assembly"), element.GetAttribute("Type"), element.InnerText); case Classify.Array: return GetArrayValue(element.GetAttribute("ElementAssembly"), element.GetAttribute("ElementType"), element.GetChidlren()); case Classify.List: return GetListValue(element.GetAttribute("GenericAssembly"), element.GetAttribute("GenericType"), element.GetChidlren()); case Classify.Dictionary: return GetDictionaryValue(element.GetAttribute("KeyGenericAssembly"), element.GetAttribute("KeyGenericType"), element.GetAttribute("ValueGenericAssembly"), element.GetAttribute("ValueGenericType"), element.GetChidlren()); case Classify.Dynamic: return GetDynamicValue(element.GetChidlren()); case Classify.Custom: return GetCustomValue(element.GetAttribute("Assembly"), element.GetAttribute("Type"), element.GetChidlren()); } return null; } public static object GetSampleva lue(string assembly, string typeFullName, string value) { var type = Assembly.Load(assembly).GetType(typeFullName); if (type == null) return null; return CoralConvert.Convert(value, type); } public static object GetListValue(string genericAssembly, string genericTypeName, List<XmlElement> elements) { var genericType = Assembly.Load(genericAssembly).GetType(genericTypeName); var type = typeof(List<>).MakeGenericType(genericType); dynamic list = Activator.CreateInstance(type, true); foreach (var element in elements) { list.Add(GetValue(element)); } return list; } public static object GetArrayValue(string elementAssembly, string elementTypeName, List<XmlElement> elements) { var elementType = Assembly.Load(elementAssembly).GetType(elementTypeName); dynamic list = Array.CreateInstance(elementType, elements.Count); for (int i = 0; i < elements.Count; i++) { list[i] = GetValue(elements[i]); } return list; } public static object GetDictionaryValue(string keyAssembly, string keyTypeName, string valueAssembly, string valueTypeName, List<XmlElement> elements) { var keyType = Assembly.Load(keyAssembly).GetType(keyTypeName); var valueType = Assembly.Load(valueAssembly).GetType(valueTypeName); var type = typeof(Dictionary<,>).MakeGenericType(keyType, valueType); dynamic dict = Activator.CreateInstance(type, true); foreach (var element in elements) { dict.Add(GetValue(element["Key"]), GetValue(element["Value"])); } return dict; } public static object GetDynamicValue(List<XmlElement> elements) { var dict = new DynamicDictionary(); foreach (var element in elements) { dict.Dictionary.Add(GetValue(element["Key"]), GetValue(element["Value"])); } return dict; } public static object GetCustomValue(string assemblyFullName, string typeFullName, List<XmlElement> elements) { var type = Assembly.Load(assemblyFullName).GetType(typeFullNa
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇理解依赖注入和控制反转 下一篇RefulApi自动化测试~Hitchhiker的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目