XmlSerializer.UnknownElement Event

Occurs when the XmlSerializer encounters an XML element of unknown type during deserialization.

Namespace: System.Xml.Serialization
Assembly: System.Xml (in system.xml.dll)

Public Event UnknownElement As XmlElementEventHandler
Dim instance As XmlSerializer
Dim handler As XmlElementEventHandler

AddHandler instance.UnknownElement, handler

/** @event */
public void add_UnknownElement (XmlElementEventHandler value)

/** @event */
public void remove_UnknownElement (XmlElementEventHandler value)

In JScript, you can handle the events defined by a class, but you cannot define your own.
Not applicable.

By default, after calling the Deserialize method, the XmlSerializer ignores XML attributes of unknown types. However, you can use this event to handle such node types.


If the XmlAnyElementAttribute is applied to a field that returns an array of XmlElement objects, all unknown elements are collected in the array. In that case, the UnknownElement event does not occur.

The following example deserializes a class named Group from a file named UnknownElements.xml. Whenever an element is found in the file that has no corresponding member in the class, the UnknownElement event occurs. To try the example, paste the following XML code into a file named UnknownElements.xml.

 <?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">
Imports System
Imports System.IO
Imports System.Xml.Serialization
Imports System.Xml
Imports System.Xml.Schema
Imports Microsoft.VisualBasic

Public Class Group
   Public GroupName As String 
End Class

Public Class Test
   Shared Sub Main()
      Dim t As Test = new Test()
      ' Deserialize the file containing unknown elements.
   End Sub

   Private Sub Serializer_UnknownElement _
   (sender As Object , e As XmlElementEventArgs)
      Console.WriteLine("Unknown Element")
      Console.WriteLine(ControlChars.Tab & e.Element.Name + " " & e.Element.InnerXml)
      Console.WriteLine(ControlChars.Tab & e.LineNumber & ":"  & e.LineNumber)
      Console.WriteLine(ControlChars.Tab & e.LinePosition & ":"   & e.LinePosition)
      Dim x As Group = CType( e.ObjectBeingDeserialized, Group)
      Console.WriteLine (x.GroupName)
      Console.WriteLine (sender.ToString())
   End Sub
   Private Sub DeserializeObject(filename As String)
      Dim ser As XmlSerializer = new XmlSerializer(GetType(Group))
      ' Add a delegate to handle unknown element events.
      AddHandler ser.UnknownElement, _
      AddressOf Serializer_UnknownElement 
      ' A FileStream is needed to read the XML document.
     Dim fs As FileStream  = new FileStream(filename, FileMode.Open)
     Dim g  As Group = CType(ser.Deserialize(fs),Group)
   End Sub
End Class

import System.*;
import System.IO.*;
import System.Xml.Serialization.*;
import System.Xml.*;
import System.Xml.Schema.*;
public class Group
    public String GroupName;
} //Group

public class Test
    public static void main(String[] args)
        Test t = new Test();
        // Deserialize the file containing unknown elements.
    } //main

    private void Serializer_UnknownElement(Object sender, 
        XmlElementEventArgs e)
        Console.WriteLine("Unknown Element");
        Console.WriteLine("\t" + e.get_Element().get_Name() + " " 
            + e.get_Element().get_InnerXml());
        Console.WriteLine("\t LineNumber: " + e.get_LineNumber());
        Console.WriteLine("\t LinePosition: " + e.get_LinePosition());

        Group x = (Group)(e.get_ObjectBeingDeserialized());
    } //Serializer_UnknownElement

    private void DeserializeObject(String fileName)
        XmlSerializer ser = new XmlSerializer(Group.class.ToType());
        // Add a delegate to handle unknown element events.
        ser.add_UnknownElement(new XmlElementEventHandler(
        // A FileStream is needed to read the XML document.
        FileStream fs = new FileStream(fileName, FileMode.Open);
        Group g = (Group)ser.Deserialize(fs);
    } //DeserializeObject
} //Test

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 2.0

XNA Framework

Supported in: 1.0