XmlSerializer.UnknownAttribute Ereignis

Definition

Tritt auf, wenn beim XmlSerializer Deserialisieren ein XML-Attribut mit unbekanntem Typ auftritt.

public:
 event System::Xml::Serialization::XmlAttributeEventHandler ^ UnknownAttribute;
public event System.Xml.Serialization.XmlAttributeEventHandler UnknownAttribute;
member this.UnknownAttribute : System.Xml.Serialization.XmlAttributeEventHandler 
Public Custom Event UnknownAttribute As XmlAttributeEventHandler 

Ereignistyp

Beispiele

Im folgenden Beispiel werden Informationen zu unbekannten Attributen gedruckt, die beim Deserialisieren eines XML-Dokuments aufgetreten sind.

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("UnknownAttributes.xml");
   }
   private void Serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e){
      Console.WriteLine("Unknown Attribute");
      Console.WriteLine("\t" + e.Attr.Name + " " + e.Attr.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.UnknownAttribute+=new XmlAttributeEventHandler(Serializer_UnknownAttribute);
      // A FileStream is needed to read the XML document.
     FileStream fs = new FileStream(filename, FileMode.Open);
     Group g = (Group) ser.Deserialize(fs);
     fs.Close();
    }
}
Imports System.IO
Imports System.Xml.Serialization
Imports System.Xml
Imports System.Xml.Schema

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("UnknownAttributes.xml")
   End Sub

   Private Sub Serializer_UnknownAttribute _
   (sender As Object , e As XmlAttributeEventArgs)
      Console.WriteLine("Unknown Attribute")
      Console.WriteLine(ControlChars.Tab & e.Attr.Name + " " & e.Attr.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.UnknownAttribute, _
      AddressOf Serializer_UnknownAttribute 
      ' 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

Hinweise

Standardmäßig werden nach dem Aufrufen der Deserialize Methode xml-Attribute XmlSerializer unbekannter Typen ignoriert. Sie können dieses Ereignis jedoch verwenden, um solche Knotentypen zu behandeln.

Wenn die Instanz der klasse, die deserialisiert wird, ein Feld enthält, das ein Array von XmlAttribute Objekten zurückgibt und auf XmlAnyAttributeAttribute das Feld angewendet wurde, tritt das UnknownAttribute Ereignis nicht auf. Stattdessen werden alle unbekannten XML-Attribute im Array erfasst.

Gilt für:

Weitere Informationen