XmlSerializer.UnknownAttribute Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Występuje, gdy XmlSerializer napotka atrybut XML nieznanego typu podczas deserializacji.
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
Typ zdarzenia
Przykłady
Poniższy przykład wyświetla informacje o nieznanych atrybutach napotkanych podczas deserializacji dokumentu XML.
#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
{
public:
static void main()
{
Test^ t = gcnew 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{0} {1}", e->Attr->Name, e->Attr->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 );
}
void DeserializeObject( String^ filename )
{
XmlSerializer^ ser = gcnew XmlSerializer( Group::typeid );
// Add a delegate to handle unknown element events.
ser->UnknownAttribute += gcnew XmlAttributeEventHandler( this, &Test::Serializer_UnknownAttribute );
// 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::main();
}
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
Uwagi
Domyślnie po wywołaniu Deserialize metody XmlSerializer funkcja ignoruje atrybuty XML nieznanych typów. Można jednak użyć tego zdarzenia do obsługi takich typów węzłów.
Jeśli wystąpienie klasy deserializowanej zawiera pole, które zwraca tablicę XmlAttribute obiektów i XmlAnyAttributeAttribute obiekt został zastosowany do pola, UnknownAttribute zdarzenie nie występuje. Zamiast tego wszystkie nieznane atrybuty XML są zbierane do tablicy.
Dotyczy
Zobacz też
- XmlAnyAttributeAttribute
- CanDeserialize(XmlReader)
- Deserialize(Stream)
- UnknownNode
- XmlAttributes
- Wprowadzenie do serializacji XML
- Instrukcje: Określanie alternatywnej nazwy elementu dla strumienia XML
- Kontrolowanie serializacji XML przy użyciu atrybutów
- Przykłady serializacji XML
- Narzędzie definicji schematu XML (Xsd.exe)