public static void Deserialize(IXmlSerializable source, XmlReader reader) { const string method = "Deserialize"; if (reader == null) { throw new Exceptions.NullParameterException(typeof(XmlSerializer), method, "reader"); } // IXmlSerializable.ReadOuterXml() should read the entire element on which the reader is position, // including the EndElement node, which some implementations don't do. Check for this common problem. if (source != null) { #if DEBUG Debug.Assert(reader.NodeType == XmlNodeType.None || reader.NodeType == XmlNodeType.Element, string.Format("The reader node is {0} '{1}' before calling ReadOuterXml() on '{2}'.", reader.NodeType, reader.LocalName, source.GetType().FullName), "Before ReadOuterXml() is called the reader should be positioned at the start of the element" + " to be read by that method."); int depth = reader.Depth; #endif source.ReadOuterXml(reader); #if DEBUG Debug.Assert(depth == 0 || reader.Depth == depth - 1, string.Format("The reader node is {0} '{1}'" + " after calling ReadOuterXml() on '{2}'.", reader.NodeType, reader.LocalName, source.GetType().FullName), "After ReadOuterXml() is called the reader should be positioned immediately AFTER the element" + " read by that method (NOT on the EndElement node of the element that was read)."); #endif } }