public static ReadAndConsumeMatchingEndElement ( |
||
reader | ||
return | void |
/// <summary> /// Reads the current node in the reader's value. /// </summary> /// <param name="reader"></param> /// <returns></returns> public static string ReadCurrentNodeValue(XmlReader reader) { var fromElement = (reader.NodeType == XmlNodeType.Element); // If we're deserializing from an element, if (fromElement) { // read the start node. if (reader.IsEmptyElement) { reader.Read(); return(""); } reader.ReadStartElement(); } var s = reader.Value; // If we're deserializing from an element, if (fromElement) { // read the end node. XmlReaderHelper.ReadAndConsumeMatchingEndElement(reader); } return(s); }
protected virtual void DeserializeElement(object obj, XmlReader reader, SerializationContext state) { SerializationMemberInfo serializationMember; if (reader.Prefix.Length > 0) { serializationMember = (SerializationMemberInfo)elementMembersMap[state.Parameters.Namespaces.GetNamespace(reader.Prefix) + (char)0xff + reader.LocalName]; } else { serializationMember = (SerializationMemberInfo)elementMembersMap[reader.LocalName]; } if (serializationMember == null) { XmlReaderHelper.ReadAndConsumeMatchingEndElement(reader); } else { state.PushCurrentMemberInfo(serializationMember); try { if (serializationMember.SerializeAsValueNodeAttributeName != null && serializationMember.GetSerializer(reader) is TypeSerializerWithSimpleTextSupport) { var s = reader.GetAttribute(serializationMember.SerializeAsValueNodeAttributeName); var serializer = serializationMember.GetSerializer(reader); serializationMember.SetValue(obj, ((TypeSerializerWithSimpleTextSupport)(serializer)).Deserialize(s, state)); XmlReaderHelper.ReadAndConsumeMatchingEndElement(reader); } else { serializationMember.SetValue(obj, serializationMember.GetSerializer(reader).Deserialize(reader, state)); } } finally { state.PopCurrentMemberInfo(); } } }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="state"></param> /// <returns></returns> public override object Deserialize(XmlReader reader, SerializationState state) { IList retval = null; if (m_ListType.IsArray) { retval = new ArrayList(); } else { retval = (IList)Activator.CreateInstance(m_ListType); state.DeserializationStart(retval); } // Go thru all elements and deserialize each one. if (reader.IsEmptyElement) { reader.ReadStartElement(); } else { reader.ReadStartElement(); for (;;) { ListItem listItem; XmlReaderHelper.ReadUntilAnyTypesReached(reader, XmlReaderHelper.ElementOrEndElement); if (reader.NodeType == XmlNodeType.Element) { listItem = (ListItem)m_AliasToItemMap[reader.Name]; if (listItem.Attribute != null && listItem.Attribute.SerializeAsValueNode && listItem.Attribute.ValueNodeAttributeName != null && listItem.Serializer is TypeSerializerWithSimpleTextSupport) { string s; s = reader.GetAttribute(listItem.Attribute.ValueNodeAttributeName); retval.Add(((TypeSerializerWithSimpleTextSupport)listItem.Serializer).Deserialize(s, state)); XmlReaderHelper.ReadAndConsumeMatchingEndElement(reader); } else { retval.Add(listItem.Serializer.Deserialize(reader, state)); } } else { if (reader.NodeType == XmlNodeType.EndElement) { reader.ReadEndElement(); } break; } } } if (m_ListType.IsArray) { Array array = Array.CreateInstance(m_ListType.GetElementType(), retval.Count); state.DeserializationStart(retval); retval.CopyTo(array, 0); retval = array; } state.DeserializationEnd(retval); return(retval); }
protected override void DeserializeElement(object obj, XmlReader reader, SerializationContext state) { ListItem listItem; bool isGenericList; MethodInfo methodInfo; System.Collections.IList list; if (obj is System.Collections.IList) { methodInfo = null; isGenericList = false; list = (System.Collections.IList)obj; } else { list = null; isGenericList = true; methodInfo = obj.GetType().GetMethod("Add"); } if (base.CanDeserializeElement(obj, reader, state)) { base.DeserializeElement (obj, reader, state); return; } if (aliasToItemMap.TryGetValue(reader.Name, out listItem)) { if (listItem.Attribute != null && listItem.Attribute.SerializeAsValueNode && listItem.Attribute.ValueNodeAttributeName != null && listItem.Serializer is TypeSerializerWithSimpleTextSupport) { var s = reader.GetAttribute(listItem.Attribute.ValueNodeAttributeName); if (isGenericList) { methodInfo.Invoke(obj, new object[] { ((TypeSerializerWithSimpleTextSupport)listItem.Serializer).Deserialize(s, state) }); } else { list.Add(((TypeSerializerWithSimpleTextSupport)listItem.Serializer).Deserialize(s, state)); } XmlReaderHelper.ReadAndConsumeMatchingEndElement(reader); } else { if (isGenericList) { methodInfo.Invoke(obj, new object[] { listItem.Serializer.Deserialize(reader, state) }); } else { list.Add(listItem.Serializer.Deserialize(reader, state)); } } } else { TypeSerializer serializer = null; if (this.dynamicTypeResolver != null) { var type = dynamicTypeResolver.GetType(reader); if (type != null) { serializer = cache.GetTypeSerializerBySupportedType(type); } } if (serializer == null) { base.DeserializeElement (obj, reader, state); } else { if (isGenericList) { methodInfo.Invoke(obj, new object[] { serializer.Deserialize(reader, state) }); } else { list.Add(serializer.Deserialize(reader, state)); } } } }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="state"></param> /// <returns></returns> public override object Deserialize(XmlReader reader, SerializationState state) { object retval; SerializationMemberInfo serializationMember; ISerializationUnhandledMarkupListener uhm; retval = Activator.CreateInstance(m_Type); state.DeserializationStart(retval); uhm = retval as ISerializationUnhandledMarkupListener; if (reader.AttributeCount > 0) { for (int i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); if (reader.Prefix == "xmlns") { continue; } if (reader.Prefix.Length > 0) { serializationMember = (SerializationMemberInfo)m_AttributeMembersMap[state.Parameters.Namespaces.GetNamespace(reader.Prefix) + (char)0xff + reader.LocalName]; } else { serializationMember = (SerializationMemberInfo)m_AttributeMembersMap[reader.Name]; } if (serializationMember == null) { // Unknown attribute. if (uhm != null) { uhm.UnhandledAttribute(reader.Name, reader.Value); } } else { serializationMember.SetValue(retval, serializationMember.Serializer.Deserialize(reader, state)); } } reader.MoveToElement(); } if (reader.IsEmptyElement) { reader.ReadStartElement(); return(retval); } reader.ReadStartElement(); // Read elements while (true) { XmlReaderHelper.ReadUntilAnyTypesReached(reader, new XmlNodeType[] { XmlNodeType.Element, XmlNodeType.EndElement }); if (reader.NodeType == XmlNodeType.Element) { if (reader.Prefix.Length > 0) { serializationMember = (SerializationMemberInfo)m_ElementMembersMap[state.Parameters.Namespaces.GetNamespace(reader.Prefix) + (char)0xff + reader.LocalName]; } else { serializationMember = (SerializationMemberInfo)m_ElementMembersMap[reader.LocalName]; } if (serializationMember == null) { // Unknown element. reader.Read(); XmlReaderHelper.ReadAndApproachMatchingEndElement(reader); } else { if (serializationMember.SerializeAsValueNodeAttributeName != null && serializationMember.Serializer is TypeSerializerWithSimpleTextSupport) { string s; s = reader.GetAttribute(serializationMember.SerializeAsValueNodeAttributeName); serializationMember.SetValue(retval, ((TypeSerializerWithSimpleTextSupport)(serializationMember.Serializer)).Deserialize(s, state)); XmlReaderHelper.ReadAndConsumeMatchingEndElement(reader); } else { serializationMember.SetValue(retval, serializationMember.Serializer.Deserialize(reader, state)); } } } else { if (reader.NodeType == XmlNodeType.EndElement) { reader.ReadEndElement(); } else { if (uhm != null) { uhm.UnhandledOther(reader.ReadOuterXml()); } } break; } } state.DeserializationEnd(retval); return(retval); }