Exemple #1
0
        public static object InnerFromXml(string xml, Type type,
                                          XmlNodeEventHandler UnknownNode, XmlElementEventHandler UnknownElement, XmlAttributeEventHandler UnknownAttribute,
                                          UnreferencedObjectEventHandler UnreferencedObject)
        {
            if (string.IsNullOrEmpty(xml))
            {
                return(null);
            }
            if (null == type)
            {
                return(null);
            }

            XmlSerializer xmlSerializer = new XmlSerializer(type);

            if (UnknownNode != null)
            {
                xmlSerializer.UnknownNode += UnknownNode;
            }
            if (UnknownAttribute != null)
            {
                xmlSerializer.UnknownAttribute += UnknownAttribute;
            }
            if (UnknownElement != null)
            {
                xmlSerializer.UnknownElement += UnknownElement;
            }
            //WriteStringToFile(xml, "synchroon-vanuit-PowerForms.xml");
            using (TextReader r = new StringReader(xml))
            {
                object result = xmlSerializer.Deserialize(r);
                return(result);
            }
        }
        public static T FromXml <T>(string xml,
                                    XmlNodeEventHandler UnknownNode, XmlElementEventHandler UnknownElement, XmlAttributeEventHandler UnknownAttribute,
                                    UnreferencedObjectEventHandler UnreferencedObject)
        {
            T result = (T)FromXml(xml, typeof(T), UnknownNode, UnknownElement, UnknownAttribute, UnreferencedObject);

            return(result);
        }
Exemple #3
0
        /// <summary>
        /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed.
        /// <example>
        /// unreferencedobjecteventhandler.BeginInvoke(sender, e, callback);
        /// </example>
        /// </summary>
        public static IAsyncResult BeginInvoke(this UnreferencedObjectEventHandler unreferencedobjecteventhandler, Object sender, UnreferencedObjectEventArgs e, AsyncCallback callback)
        {
            if (unreferencedobjecteventhandler == null)
            {
                throw new ArgumentNullException("unreferencedobjecteventhandler");
            }

            return(unreferencedobjecteventhandler.BeginInvoke(sender, e, callback, null));
        }
 private static object FromXml(string xml, Type type,
                               XmlNodeEventHandler UnknownNode, XmlElementEventHandler UnknownElement, XmlAttributeEventHandler UnknownAttribute,
                               UnreferencedObjectEventHandler UnreferencedObject)
 {
     if (null == type)
     {
         return(null);
     }
     try
     {
         return(InnerFromXmlProvider.InnerFromXml(xml, type, UnknownNode, UnknownElement, UnknownAttribute, UnreferencedObject));
     }
     catch (Exception)
     {
         return(InnerFromXmlProvider.InnerFromXml(xml, type, UnknownNode, UnknownElement, UnknownAttribute, UnreferencedObject));
     }
 }
        internal void ReadHeaders(XmlReader reader, XmlSerializer serializer, SoapHeaderCollection headers, SoapHeaderMapping[] mappings, SoapHeaderDirection direction, string envelopeNs, string encodingStyle)
        {
            reader.MoveToContent();
            if (!reader.IsStartElement(Soap.Header, envelopeNs))
            {
                return;
            }
            if (reader.IsEmptyElement)
            {
                reader.Skip(); return;
            }

            this.unknownHeaders      = new SoapHeaderCollection();
            this.unreferencedHeaders = new SoapHeaderCollection();
            // thread hash code is used to differentiate between deserializations in event callbacks
            this.currentThread = Thread.CurrentThread.GetHashCode();
            this.envelopeNs    = envelopeNs;

            XmlElementEventHandler         unknownHandler      = new XmlElementEventHandler(this.OnUnknownElement);
            UnreferencedObjectEventHandler unreferencedHandler = new UnreferencedObjectEventHandler(this.OnUnreferencedObject);

            serializer.UnknownElement     += unknownHandler;
            serializer.UnreferencedObject += unreferencedHandler;

            reader.ReadStartElement();
            reader.MoveToContent();

            // SOAP12: not using encodingStyle
            //object[] headerValues = (object[])serializer.Deserialize(reader, encodingStyle);
            object[] headerValues = (object[])serializer.Deserialize(reader);
            for (int i = 0; i < headerValues.Length; i++)
            {
                if (headerValues[i] != null)
                {
                    SoapHeader header = (SoapHeader)headerValues[i];
                    header.DidUnderstand = true;
                    headers.Add(header);
                }
            }

            serializer.UnknownElement     -= unknownHandler;
            serializer.UnreferencedObject -= unreferencedHandler;
            this.currentThread             = 0;
            this.envelopeNs = null;

            foreach (SoapHeader header in this.unreferencedHeaders)
            {
                headers.Add(header);
            }
            this.unreferencedHeaders = null;

            foreach (SoapHeader header in this.unknownHeaders)
            {
                headers.Add(header);
            }
            this.unknownHeaders = null;

            while (reader.NodeType == XmlNodeType.Whitespace)
            {
                reader.Skip();
            }

            if (reader.NodeType == XmlNodeType.None)
            {
                reader.Skip();
            }
            else
            {
                reader.ReadEndElement();
            }
        }