Exemple #1
0
        private T StrictDeserialize(Func <Object> block)
        {
            errors = new List <string> ();

            var Node    = new XmlNodeEventHandler(serializer_UnknownNode);
            var Attr    = new XmlAttributeEventHandler(serializer_UnknownAttribute);
            var Element = new XmlElementEventHandler(serializer_UnknownElement);

            serializer.UnknownNode      += Node;
            serializer.UnknownAttribute += Attr;
            serializer.UnknownElement   += Element;

            T result;

            try {
                result = (T)block();
            } finally {
                serializer.UnknownNode      -= Node;
                serializer.UnknownAttribute -= Attr;
                serializer.UnknownElement   -= Element;
            }

            if (errors.Count > 0)
            {
                throw new System.Exception("XML for " + typeof(T) + " has invalid format:\n" + string.Join("\n", errors.ToArray()));
            }

            return(result);
        }
 public object Deserialize(string sourceFile, Type type, XmlElementEventHandler unknownElementHandler,
                           bool deleteAfterDeserialization)
 {
     try
     {
         object result;
         using (var fileStream = new StreamReader(sourceFile))
         {
             result = Deserialize(fileStream, type, unknownElementHandler, deleteAfterDeserialization);
         }
         if (deleteAfterDeserialization)
         {
             File.Delete(sourceFile);
         }
         return(result);
     }
     catch (Exception ex)
     {
         var exceptionMessage = ExceptionUtils.GetDeepExceptionMessageOnly(ex);
         if (exceptionMessage.IndexOf("invalid character", StringComparison.OrdinalIgnoreCase) >= 0)
         {
             return(DeserializeSanitized(sourceFile, type, unknownElementHandler, deleteAfterDeserialization));
         }
         else
         {
             throw;
         }
     }
 }
Exemple #3
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 #5
0
        /// <summary>
        /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed.
        /// <example>
        /// xmlelementeventhandler.BeginInvoke(sender, e, callback);
        /// </example>
        /// </summary>
        public static IAsyncResult BeginInvoke(this XmlElementEventHandler xmlelementeventhandler, Object sender, XmlElementEventArgs e, AsyncCallback callback)
        {
            if (xmlelementeventhandler == null)
            {
                throw new ArgumentNullException("xmlelementeventhandler");
            }

            return(xmlelementeventhandler.BeginInvoke(sender, e, callback, null));
        }
        public object Deserialize(StreamReader fileStream, Type type, XmlElementEventHandler unknownElementHandler,
                                  bool deleteAfterDeserialization)
        {
            XmlSerializer serializer = new XmlSerializer(type);

            serializer.UnknownElement += new XmlElementEventHandler(DefaultUnknownElementHandler);

            if (unknownElementHandler != null)
            {
                serializer.UnknownElement += unknownElementHandler;
            }
            using (XmlReader reader = XmlReader.Create(fileStream))
            {
                return(serializer.Deserialize(reader));
            }
        }
        /// <summary>
        /// Deserialize
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="xml"></param>
        /// <param name="unknownElementHandler"></param>
        /// <returns></returns>
        public object Deserialize(XmlElement element, Type elementType, XmlElementEventHandler unknownElementHandler)
        {
            XmlSerializer serializer = new XmlSerializer(elementType);

            serializer.UnknownElement += new XmlElementEventHandler(DefaultUnknownElementHandler);

            if (unknownElementHandler != null)
            {
                serializer.UnknownElement += unknownElementHandler;
            }

            using (XmlNodeReader reader = new XmlNodeReader(element))
            {
                return(serializer.Deserialize(reader));
            }
        }
 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));
     }
 }
        public object DeserializeSanitized(string sourceFile, Type type, XmlElementEventHandler unknownElementHandler,
                                           bool deleteAfterDeserialization)
        {
            object result;

            using (var fileStream = File.OpenRead(sourceFile))
            {
                using (var sanitizedStream = new XmlSanitizingStream(fileStream))
                {
                    result = Deserialize(sanitizedStream, type, unknownElementHandler, deleteAfterDeserialization);
                }
            }
            if (deleteAfterDeserialization)
            {
                File.Delete(sourceFile);
            }
            return(result);
        }
        public T Deserialize <T>(byte[] bytes, XmlElementEventHandler unknownElementHandler, XmlAttributeEventHandler unknownAttributeHandler)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));

            serializer.UnknownElement += new XmlElementEventHandler(DefaultUnknownElementHandler);

            if (unknownElementHandler != null)
            {
                serializer.UnknownElement += unknownElementHandler;
            }
            if (unknownAttributeHandler != null)
            {
                serializer.UnknownAttribute += unknownAttributeHandler;
            }

            using (XmlReader reader = XmlReader.Create(new MemoryStream(bytes)))
            {
                return((T)serializer.Deserialize(reader));
            }
        }
        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();
            }
        }
 public T Deserialize <T>(string xml, XmlElementEventHandler unknownElementHandler, XmlAttributeEventHandler unknownAttributeHandler)
 {
     return(Deserialize <T>(StringUtils.UTF8.GetBytes(xml), unknownElementHandler, unknownAttributeHandler));
 }
 public T DeserializeFromBase64String <T>(string text, XmlElementEventHandler unknownElementHandler)
 {
     return(Deserialize <T>(Convert.FromBase64String(text), unknownElementHandler));
 }
 /// <summary>
 ///
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="sourceFile"></param>
 /// <param name="unknownElementHandler"></param>
 /// <param name="deleteAfterDeserialization"></param>
 /// <returns></returns>
 public T Deserialize <T>(string sourceFile, XmlElementEventHandler unknownElementHandler,
                          bool deleteAfterDeserialization)
 {
     return((T)Deserialize(sourceFile, typeof(T), unknownElementHandler, deleteAfterDeserialization));
 }
 /// <summary>
 /// Deserialize
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="xml"></param>
 /// <param name="unknownElementHandler"></param>
 /// <returns></returns>
 public T Deserialize <T>(XmlElement element, XmlElementEventHandler unknownElementHandler)
 {
     return((T)Deserialize(element, typeof(T), unknownElementHandler));
 }
 /// <summary>
 /// Deserialize
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="xml"></param>
 /// <param name="unknownElementHandler"></param>
 /// <returns></returns>
 public T Deserialize <T>(byte[] bytes, XmlElementEventHandler unknownElementHandler)
 {
     return(Deserialize <T>(bytes, unknownElementHandler, null));
 }