/// <summary>尝试读取引用对象</summary> /// <param name="type">要读取的对象类型</param> /// <param name="value">要读取的对象</param> /// <param name="callback">处理成员的方法</param> /// <returns>是否读取成功</returns> protected override bool ReadRefObject(Type type, ref object value, ReadObjectCallback callback) { Boolean isElement = Reader.NodeType == XmlNodeType.Element; Boolean isAtt = Settings.MemberAsAttribute && XmlWriterX.IsAttributeType(type); if (isElement && !isAtt) { if (SkipEmpty()) { return(true); } if (Reader.MoveToAttribute("Lengths")) { WriteLog("ReadLengths"); Lengths = ReadString(); if (Reader.NodeType == XmlNodeType.Attribute) { Reader.MoveToElement(); } } Reader.ReadStartElement(); } Boolean b = base.ReadRefObject(type, ref value, callback); if (isElement && !isAtt && Reader.NodeType == XmlNodeType.EndElement) { Reader.ReadEndElement(); } return(b); }
/// <summary>读取对象成员</summary> /// <param name="type">要读取的对象类型</param> /// <param name="value">要读取的对象</param> /// <param name="member">成员</param> /// <param name="index">成员索引</param> /// <param name="callback">处理成员的方法</param> /// <returns>是否读取成功</returns> protected override bool OnReadMember(Type type, ref object value, IObjectMemberInfo member, Int32 index, ReadObjectCallback callback) { Boolean isAtt = Settings.MemberAsAttribute && XmlWriterX.IsAttributeType(member.Type); if (isAtt) { Reader.MoveToAttribute(member.Name); } return(base.OnReadMember(type, ref value, member, index, callback)); }