Freigeben über


XmlSerializer.UnknownElement-Ereignis

Tritt ein, wenn XmlSerializer während der Deserialisierung auf ein XML-Element von unbekanntem Typ stößt.

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

Syntax

'Declaration
Public Event UnknownElement As XmlElementEventHandler
'Usage
Dim instance As XmlSerializer
Dim handler As XmlElementEventHandler

AddHandler instance.UnknownElement, handler
public event XmlElementEventHandler UnknownElement
public:
event XmlElementEventHandler^ UnknownElement {
    void add (XmlElementEventHandler^ value);
    void remove (XmlElementEventHandler^ value);
}
/** @event */
public void add_UnknownElement (XmlElementEventHandler value)

/** @event */
public void remove_UnknownElement (XmlElementEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Hinweise

Standardmäßig ignoriert XmlSerializer nach dem Aufruf der Deserialize-Methode XML-Attribute mit unbekanntem Typ. Sie können dieses Ereignis jedoch zur Behandlung derartiger Knotentypen verwenden.

Hinweis

Wenn XmlAnyElementAttribute auf ein Feld angewendet wird, das ein Array von XmlElement-Objekten zurückgibt, werden alle unbekannten Elemente im Array erfasst. In diesem Falls tritt das UnknownElement-Ereignis nicht ein.

Beispiel

Im folgenden Beispiel wird eine Klasse mit dem Namen Group aus der Datei UnknownElements.xml deserialisiert. Für jedes in der Datei vorhandene Element, dem kein Member in der Klasse entspricht, wird das UnknownElement-Ereignis ausgelöst. Fügen Sie zum Ausführen des Beispiels den folgenden XML-Code in eine Datei mit der Bezeichnung UnknownElements.xml ein.

 <?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">
   <GroupName>MyGroup</GroupName>
   <GroupSize>Large</GroupSize>
   <GroupNumber>444</GroupNumber>
   <GroupBase>West</GroupBase>
 </Group>
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.
      t.DeserializeObject("UnknownElements.xml")
   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)
     fs.Close()
   End Sub
End Class
using System;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Xml.Schema;

public class Group{
   public string GroupName;
}

public class Test{
   static void Main(){
      Test t = new Test();
      // Deserialize the file containing unknown elements.
      t.DeserializeObject("UnknownElements.xml");
   }
   private void Serializer_UnknownElement(object sender, XmlElementEventArgs e){
      Console.WriteLine("Unknown Element");
      Console.WriteLine("\t" + e.Element.Name + " " + e.Element.InnerXml);
      Console.WriteLine("\t LineNumber: " + e.LineNumber);
      Console.WriteLine("\t LinePosition: " + e.LinePosition);
      
      Group x  = (Group) e.ObjectBeingDeserialized;
      Console.WriteLine (x.GroupName);
      Console.WriteLine (sender.ToString());
   }
   private void DeserializeObject(string filename){
      XmlSerializer ser = new XmlSerializer(typeof(Group));
      // Add a delegate to handle unknown element events.
      ser.UnknownElement+=new XmlElementEventHandler(Serializer_UnknownElement);
      // A FileStream is needed to read the XML document.
     FileStream fs = new FileStream(filename, FileMode.Open);
     Group g = (Group) ser.Deserialize(fs);
     fs.Close();
    }
}
#using <System.Xml.dll>
#using <System.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;
using namespace System::Xml;
using namespace System::Xml::Schema;

public ref class Group
{
public:
   String^ GroupName;
};

public ref class Test
{
private:
   void Serializer_UnknownElement( Object^ sender, XmlElementEventArgs^ e )
   {
      Console::WriteLine( "Unknown Element" );
      Console::Write( "\t {0}", e->Element->Name );
      Console::WriteLine( " {0}", e->Element->InnerXml );
      Console::WriteLine( "\t LineNumber: {0}", e->LineNumber );
      Console::WriteLine( "\t LinePosition: {0}", e->LinePosition );
      Group^ x = dynamic_cast<Group^>(e->ObjectBeingDeserialized);
      Console::WriteLine( x->GroupName );
      Console::WriteLine( sender );
   }

public:
   void DeserializeObject( String^ filename )
   {
      XmlSerializer^ ser = gcnew XmlSerializer( Group::typeid );

      // Add a delegate to handle unknown element events.
      ser->UnknownElement += gcnew XmlElementEventHandler( this, &Test::Serializer_UnknownElement );

      // A FileStream is needed to read the XML document.
      FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
      Group^ g = dynamic_cast<Group^>(ser->Deserialize( fs ));
      fs->Close();
   }
};

int main()
{
   Test^ t = gcnew Test;

   // Deserialize the file containing unknown elements.
   t->DeserializeObject( "UnknownElements.xml" );
}
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.
        t.DeserializeObject("UnknownElements.xml");
    } //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());
        Console.WriteLine(x.GroupName);
        Console.WriteLine(sender.ToString());
    } //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(
            Serializer_UnknownElement));
        // A FileStream is needed to read the XML document.
        FileStream fs = new FileStream(fileName, FileMode.Open);
        Group g = (Group)ser.Deserialize(fs);
        fs.Close();
    } //DeserializeObject
} //Test

Plattformen

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

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

XmlSerializer-Klasse
XmlSerializer-Member
System.Xml.Serialization-Namespace
XmlAnyElementAttribute-Klasse
UnknownNode
XmlSerializer.UnknownAttribute-Ereignis
XmlAttributes-Klasse

Weitere Ressourcen

Einführung in die XML-Serialisierung
Gewusst wie: Angeben eines alternativen Elementnamens für einen XML-Stream
Steuern der XML-Serialisierung mit Attributen
Beispiele für die XML-Serialisierung
XML Schema Definition-Tool (Xsd.exe)