次の方法で共有


XmlNodeEventHandler デリゲート

XmlSerializerUnknownNode イベントを処理するメソッドを表します。

<Serializable>
Public Delegate Sub XmlNodeEventHandler( _   ByVal sender As Object, _   ByVal e As XmlNodeEventArgs _)
[C#]
[Serializable]
public delegate void XmlNodeEventHandler(   object sender,   XmlNodeEventArgs e);
[C++]
[Serializable]
public __gc __delegate void XmlNodeEventHandler(   Object* sender,   XmlNodeEventArgs* e);

[JScript] JScript では、.NET Framework のデリゲートを利用することができます。ただし、独自に定義することはできません。

パラメータ [Visual Basic, C#, C++]

作成するイベント ハンドラは、XmlNodeEventHandler クラスのデリゲート定義と同一のパラメータを持つ必要があります。

  • sender
    イベントのソース。
  • e
    イベント データを格納している XmlNodeEventArgs

解説

XmlNodeEventHandler デリゲートを作成する場合は、このイベントを処理するメソッドを指定します。イベントをイベント ハンドラに関連付けるには、デリゲートのインスタンスをイベントに追加します。デリゲートを削除しない限り、そのイベントが発生すると常にイベント ハンドラが呼び出されます。イベント ハンドラ デリゲートの詳細については、「 イベントとデリゲート 」を参照してください。

UnknownNode イベントは、 Deserialize メソッドが呼び出されたときにだけ発生します。

使用例

[Visual Basic, C#, C++] XmlSerializer を作成し、 UnknownNode イベントにイベント ハンドラを追加し、オブジェクトを逆シリアル化する例を次に示します。

 
Private Sub DeserializeItem(ByVal filename As String)
    Dim mySerializer As New XmlSerializer(GetType(ObjectToDeserialize))
    ' Add an instance of the delegate to the event.
    AddHandler mySerializer.UnknownNode, AddressOf Serializer_UnknownNode
    ' A FileStream is needed to read the file to deserialize.
    Dim fs As New FileStream(filename, FileMode.Open)
    Dim o As ObjectToDeserialize = _
        CType(mySerializer.Deserialize(fs), ObjectToDeserialize)
End Sub 'DeserializeItem


Protected Sub Serializer_UnknownNode _
                (ByVal sender As Object, _
                 ByVal e As XmlNodeEventArgs)
    
    Console.WriteLine("UnknownNode Name: " & e.Name)
    Console.WriteLine("UnknownNode LocalName: " & e.LocalName)
    Console.WriteLine("UnknownNode Namespace URI: " & e.NamespaceURI)
    Console.WriteLine("UnknownNode Text: " & e.Text)
    
    Dim o As Object = e.ObjectBeingDeserialized
    Console.WriteLine("Object being deserialized " & o.ToString())
    
    Dim myNodeType As XmlNodeType = e.NodeType
    Console.WriteLine(myNodeType)
End Sub


[C#] 

    private void DeserializeItem(string filename) {
        XmlSerializer mySerializer = 
            new XmlSerializer(typeof(ObjectToDeserialize));
        // Add an instance of the delegate to the event.
        mySerializer.UnknownNode += new XmlNodeEventHandler
            (Serializer_UnknownNode);
        // A FileStream is needed to read the file to deserialize.
        FileStream fs = new FileStream(filename, FileMode.Open);
        ObjectToDeserialize o = (ObjectToDeserialize)mySerializer.Deserialize(fs);
    }
     
    protected void Serializer_UnknownNode
        (object sender, XmlNodeEventArgs e) {
        
        Console.WriteLine("UnknownNode Name: "
                          + e.Name);
        Console.WriteLine("UnknownNode LocalName: "
                          + e.LocalName);
        Console.WriteLine("UnknownNode Namespace URI: "
                          + e.NamespaceURI);
        Console.WriteLine("UnknownNode Text: "
                          + e.Text);
     
        object o = e.ObjectBeingDeserialized;
        Console.WriteLine("Object being deserialized " 
                          + o.ToString());
           
        XmlNodeType myNodeType = e.NodeType;
        Console.WriteLine(myNodeType);
    }


[C++] 

private:
    void DeserializeItem(String* filename) {
        XmlSerializer* mySerializer = 
            new XmlSerializer(__typeof(ObjectToDeserialize));
        // Add an instance of the delegate to the event.
        mySerializer->UnknownNode += new XmlNodeEventHandler(this, &Class1::Serializer_UnknownNode);
        // A FileStream is needed to read the file to deserialize.
        FileStream* fs = new FileStream(filename, FileMode::Open);
        ObjectToDeserialize* o = dynamic_cast<ObjectToDeserialize*>(mySerializer->Deserialize(fs));
    }
     
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);
     
        Object* o = e->ObjectBeingDeserialized;
        Console::WriteLine(S"Object being deserialized {0}", o);
           
        XmlNodeType myNodeType = e->NodeType;
        Console::WriteLine(myNodeType);
    }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Xml.Serialization

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Xml (System.Xml.dll 内)

参照

System.Xml.Serialization 名前空間 | Deserialize | XmlSerializer