Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public override object Deserialize(XmlReader reader, SerializationState state)
        {
            object retval;
            LightSerializationMember 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);

                    serializationMember = (LightSerializationMember)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)
                {
                    serializationMember = (LightSerializationMember)m_ElementMembersMap[reader.Name];

                    if (serializationMember == null)
                    {
                        // Unknown element.
                    }
                    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);
        }
        /// <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;
        }
        /// <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);
        }
        /// <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;
        }
Exemple #5
0
        /// <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);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public override object Deserialize(XmlReader reader, SerializationState state)
        {
            object retval;
            LightSerializationMember 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);

                    serializationMember = (LightSerializationMember)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)
                {
                    serializationMember = (LightSerializationMember)m_ElementMembersMap[reader.Name];

                    if (serializationMember == null)
                    {
                        // Unknown element.
                    }
                    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;
        }