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); }
/// <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(); } }