/// <summary> /// 反序列化操作 /// </summary> public object Deserialize() { if (null == XmlDoc.DocumentElement) { throw new InvalidDataException(string.Format("{0}, 没有加载XML内容", MethodBase.GetCurrentMethod().Name)); } // 验证XML内容是否被成功加载 //XmlRootAttribute attr = SerializeObjectType.GetCustomAttributes(true)?.First(ca => "XmlRootAttribute" == ca.GetType().Name) as XmlRootAttribute; var customAttrs = SerializeObjectType.GetCustomAttributes(true); XmlRootAttribute attr = (null != customAttrs) ? customAttrs.First(ca => "XmlRootAttribute" == ca.GetType().Name) as XmlRootAttribute : null; if (null == attr) { throw new XmlException(string.Format("{0}, 待反序列化的数据类型({1})不包含可序列化的XmlRoot属性", MethodBase.GetCurrentMethod().Name, SerializeObjectType)); } if (NodeNameMatch(XmlDoc.DocumentElement, attr.ElementName)) { try { _serializeObj = SerializeObjectType.Assembly.CreateInstance(SerializeObjectType.FullName); // 获取序列化实体的成员变量和属性 List <MemberInfo> miList = new List <MemberInfo>(1); miList.AddRange(SerializeObj.GetType().GetFields()); miList.AddRange(SerializeObj.GetType().GetProperties()); // 解析所有子节点 ParseNodes(XmlDoc.DocumentElement.ChildNodes, ref _serializeObj, miList); } catch (Exception ex) { MyLog.Instance.Error(ex, "在{0}中,反序列化{1}实体异常。", MethodBase.GetCurrentMethod().Name, SerializeObjectType); } } else { throw new XmlException(string.Format("{0}, 待反序列化的数据类型({1})与XML内容不匹配", MethodBase.GetCurrentMethod().Name, SerializeObjectType)); } // if (NodeNameMatch(XmlDoc.DocumentElement, attr.ElementName)) else return(SerializeObj); }