XmlSerializer.UnknownNode Event
Occurs when the XmlSerializer encounters an XML node of unknown type during deserialization.
[Visual Basic] Public Event UnknownNode As XmlNodeEventHandler [C#] public event XmlNodeEventHandler UnknownNode; [C++] public: __event XmlNodeEventHandler* UnknownNode;
[JScript] In JScript, you can handle the events defined by a class, but you cannot define your own.
Event Data
The event handler receives an argument of type XmlNodeEventArgs containing data related to this event. The following XmlNodeEventArgs properties provide information specific to this event.
| Property | Description |
|---|---|
| LineNumber | Gets the line number of the unknown XML node. |
| LinePosition | Gets the position in the line of the unknown XML node. |
| LocalName | Gets the XML local name of the XML node being deserialized. |
| Name | Gets the name of the XML node being deserialized. |
| NamespaceURI | Gets the namespace URI that is associated with the XML node being deserialized. |
| NodeType | Gets the type of the XML node being deserialized. |
| ObjectBeingDeserialized | Gets the object being deserialized. |
| Text | Gets the text of the XML node being deserialized. |
Remarks
By default, after calling the Deserialize method, the XmlSerializer ignores XML nodes of unknown types. However, you can use this event to handle such node types.
Example
[Visual Basic, C#, C++] The following example prints the type of any encountered unknown node.
[Visual Basic] Imports System Imports System.IO Imports System.Xml Imports System.Xml.Serialization Public Class Group ' Only the GroupName field will be known. Public GroupName As String End Class Public Class Test Shared Sub Main() Dim t As Test = New Test() t.DeserializeObject("UnknownNodes.xml") End Sub Private Sub DeserializeObject(filename As String ) Dim mySerializer As XmlSerializer = New XmlSerializer(GetType(Group)) Dim fs As FileStream = New FileStream(filename, FileMode.Open) AddHandler mySerializer.UnknownNode, _ AddressOf serializer_UnknownNode Dim myGroup As Group = _ CType(mySerializer.Deserialize(fs), Group) fs.Close() End Sub Protected Sub serializer_UnknownNode _ (sender As object , e As XmlNodeEventArgs ) Console.WriteLine _ ("UnknownNode Name: {0}", e.Name) Console.WriteLine _ ("UnknownNode LocalName: {0}" ,e.LocalName) Console.WriteLine _ ("UnknownNode Namespace URI: {0}", e.NamespaceURI) Console.WriteLine _ ("UnknownNode Text: {0}", e.Text) Dim myNodeType As XmlNodeType = e.NodeType Console.WriteLine("NodeType: {0}", myNodeType) Dim myGroup As Group = CType(e.ObjectBeingDeserialized, Group) Console.WriteLine("GroupName: {0}", myGroup.GroupName) Console.WriteLine() End Sub End Class ' Paste this XML into a file named UnknownNodes: '<?xml version="1.0" encoding="utf-8"?> '<Group xmlns:xsi="http:'www.w3.org/2001/XMLSchema-instance" 'xmlns:xsd="http:'www.w3.org/2001/XMLSchema" xmlns:coho = "http:'www.cohowinery.com" 'xmlns:cp="http:'www.cpandl.com"> ' <coho:GroupName>MyGroup</coho:GroupName> ' <cp:GroupSize>Large</cp:GroupSize> ' <cp:GroupNumber>444</cp:GroupNumber> ' <coho:GroupBase>West</coho:GroupBase> ' <coho:ThingInfo> ' <Number>1</Number> ' <Name>Thing1</Name> ' <Elmo> ' <Glue>element</Glue> ' </Elmo> ' </coho:ThingInfo> '/Group> [C#] using System; using System.IO; using System.Xml; using System.Xml.Serialization; public class Group{ // Only the GroupName field will be known. public string GroupName; } public class Test{ static void Main(){ Test t = new Test(); t.DeserializeObject("UnknownNodes.xml"); } private void DeserializeObject(string filename){ XmlSerializer mySerializer = new XmlSerializer(typeof(Group)); FileStream fs = new FileStream(filename, FileMode.Open); mySerializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode); Group myGroup = (Group) mySerializer.Deserialize(fs); fs.Close(); } protected void serializer_UnknownNode (object sender, XmlNodeEventArgs e){ Console.WriteLine ("UnknownNode Name: {0}", e.Name); Console.WriteLine ("UnknownNode LocalName: {0}" ,e.LocalName); Console.WriteLine ("UnknownNode Namespace URI: {0}", e.NamespaceURI); Console.WriteLine ("UnknownNode Text: {0}", e.Text); XmlNodeType myNodeType = e.NodeType; Console.WriteLine("NodeType: {0}", myNodeType); Group myGroup = (Group) e.ObjectBeingDeserialized; Console.WriteLine("GroupName: {0}", myGroup.GroupName); Console.WriteLine(); } } /* Paste this XML into a file named UnknownNodes: <?xml version="1.0" encoding="utf-8"?> <Group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:coho = "http://www.cohowinery.com" xmlns:cp="http://www.cpandl.com"> <coho:GroupName>MyGroup</coho:GroupName> <cp:GroupSize>Large</cp:GroupSize> <cp:GroupNumber>444</cp:GroupNumber> <coho:GroupBase>West</coho:GroupBase> <coho:ThingInfo> <Number>1</Number> <Name>Thing1</Name> <Elmo> <Glue>element</Glue> </Elmo> </coho:ThingInfo> </Group> */ [C++] #using <mscorlib.dll> #using <System.Xml.dll> using namespace System; using namespace System::IO; using namespace System::Xml; using namespace System::Xml::Serialization; public __gc class Group{ // Only the GroupName field will be known. public: String* GroupName; }; public __gc class Test{ public: static void main(){ Test* t = new Test(); t->DeserializeObject(S"UnknownNodes.xml"); } private: void DeserializeObject(String* filename){ XmlSerializer* mySerializer = new XmlSerializer(__typeof(Group)); FileStream* fs = new FileStream(filename, FileMode::Open); mySerializer->UnknownNode += new XmlNodeEventHandler(this, &Test::serializer_UnknownNode); Group* myGroup = dynamic_cast<Group*> (mySerializer->Deserialize(fs)); fs->Close(); } protected: void serializer_UnknownNode (Object* /*sender*/, XmlNodeEventArgs* e){ Console::WriteLine(S"UnknownNode Name: {0}",e->Name); Console::WriteLine(S"UnknownNode LocalName: {0}",e->LocalName); Console::WriteLine(S"UnknownNode Namespace URI: {0}",e->NamespaceURI); Console::WriteLine(S"UnknownNode Text: {0}",e->Text); XmlNodeType myNodeType = e->NodeType; Console::WriteLine(S"NodeType: {0}", __box(myNodeType)); Group* myGroup = dynamic_cast<Group*> (e->ObjectBeingDeserialized); Console::WriteLine(S"GroupName: {0}",myGroup->GroupName); Console::WriteLine(); } }; int main() { Test::main(); } /* Paste this XML into a file named UnknownNodes: <?xml version="1.0" encoding="utf-8"?> <Group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:coho = "http://www.cohowinery.com" xmlns:cp="http://www.cpandl.com"> <coho:GroupName>MyGroup</coho:GroupName> <cp:GroupSize>Large</cp:GroupSize> <cp:GroupNumber>444</cp:GroupNumber> <coho:GroupBase>West</coho:GroupBase> <coho:ThingInfo> <Number>1</Number> <Name>Thing1</Name> <Elmo> <Glue>element</Glue> </Elmo> </coho:ThingInfo> </Group> */
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
See Also
XmlSerializer Class | XmlSerializer Members | System.Xml.Serialization Namespace | XmlAnyElementAttribute | XmlAnyAttributeAttribute | CanDeserialize | Deserialize | UnknownAttribute | Introducing XML Serialization | Controlling XML Serialization Using Attributes | Examples of XML Serialization | The XML Schema Definition Tool and XML Serialization