XmlSerializer.UnknownNode 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
XmlSerializer가 deserialization을 수행하는 동안 알 수 없는 형식의 XML 노드가 나타날 때 발생합니다.
public:
event System::Xml::Serialization::XmlNodeEventHandler ^ UnknownNode;
public event System.Xml.Serialization.XmlNodeEventHandler UnknownNode;
member this.UnknownNode : System.Xml.Serialization.XmlNodeEventHandler
Public Custom Event UnknownNode As XmlNodeEventHandler
이벤트 유형
예제
다음 예제에서는 발견된 알 수 없는 노드의 형식을 인쇄합니다.
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Serialization;
public ref class Group
{
public:
// Only the GroupName field will be known.
String^ GroupName;
};
public ref class Test
{
public:
static void main()
{
Test^ t = gcnew Test;
t->DeserializeObject( "UnknownNodes.xml" );
}
private:
void DeserializeObject( String^ filename )
{
XmlSerializer^ mySerializer = gcnew XmlSerializer( Group::typeid );
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
mySerializer->UnknownNode += gcnew XmlNodeEventHandler( this, &Test::serializer_UnknownNode );
Group^ myGroup = dynamic_cast<Group^>(mySerializer->Deserialize( fs ));
fs->Close();
}
private:
void serializer_UnknownNode( Object^ /*sender*/, XmlNodeEventArgs^ e )
{
Console::WriteLine( "UnknownNode Name: {0}", e->Name );
Console::WriteLine( "UnknownNode LocalName: {0}", e->LocalName );
Console::WriteLine( "UnknownNode Namespace URI: {0}", e->NamespaceURI );
Console::WriteLine( "UnknownNode Text: {0}", e->Text );
XmlNodeType myNodeType = e->NodeType;
Console::WriteLine( "NodeType: {0}", myNodeType );
Group^ myGroup = dynamic_cast<Group^>(e->ObjectBeingDeserialized);
Console::WriteLine( "GroupName: {0}", myGroup->GroupName );
Console::WriteLine();
}
};
int main()
{
Test::main();
}
/* Paste this XML into a file named UnknownNodes:
<?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" xmlns:coho = "http://www.cohowinery.com"
xmlns:cp="http://www.cpandl.com">
<coho:GroupName>MyGroup</coho:GroupName>
<cp:GroupSize>Large</cp:GroupSize>
<cp:GroupNumber>444</cp:GroupNumber>
<coho:GroupBase>West</coho:GroupBase>
<coho:ThingInfo>
<Number>1</Number>
<Name>Thing1</Name>
<Elmo>
<Glue>element</Glue>
</Elmo>
</coho:ThingInfo>
</Group>
*/
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class Group{
// Only the GroupName field will be known.
public string GroupName;
}
public class Test{
static void Main(){
Test t = new Test();
t.DeserializeObject("UnknownNodes.xml");
}
private void DeserializeObject(string filename){
XmlSerializer mySerializer = new XmlSerializer(typeof(Group));
FileStream fs = new FileStream(filename, FileMode.Open);
mySerializer.UnknownNode += new
XmlNodeEventHandler(serializer_UnknownNode);
Group myGroup = (Group) mySerializer.Deserialize(fs);
fs.Close();
}
private void serializer_UnknownNode
(object sender, XmlNodeEventArgs e){
Console.WriteLine
("UnknownNode Name: {0}", e.Name);
Console.WriteLine
("UnknownNode LocalName: {0}" ,e.LocalName);
Console.WriteLine
("UnknownNode Namespace URI: {0}", e.NamespaceURI);
Console.WriteLine
("UnknownNode Text: {0}", e.Text);
XmlNodeType myNodeType = e.NodeType;
Console.WriteLine("NodeType: {0}", myNodeType);
Group myGroup = (Group) e.ObjectBeingDeserialized;
Console.WriteLine("GroupName: {0}", myGroup.GroupName);
Console.WriteLine();
}
}
/* Paste this XML into a file named UnknownNodes:
<?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" xmlns:coho = "http://www.cohowinery.com"
xmlns:cp="http://www.cpandl.com">
<coho:GroupName>MyGroup</coho:GroupName>
<cp:GroupSize>Large</cp:GroupSize>
<cp:GroupNumber>444</cp:GroupNumber>
<coho:GroupBase>West</coho:GroupBase>
<coho:ThingInfo>
<Number>1</Number>
<Name>Thing1</Name>
<Elmo>
<Glue>element</Glue>
</Elmo>
</coho:ThingInfo>
</Group>
*/
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Class Group
' Only the GroupName field will be known.
Public GroupName As String
End Class
Public Class Test
Shared Sub Main()
Dim t As Test = New Test()
t.DeserializeObject("UnknownNodes.xml")
End Sub
Private Sub DeserializeObject(filename As String )
Dim mySerializer As XmlSerializer = New XmlSerializer(GetType(Group))
Dim fs As FileStream = New FileStream(filename, FileMode.Open)
AddHandler mySerializer.UnknownNode, _
AddressOf serializer_UnknownNode
Dim myGroup As Group = _
CType(mySerializer.Deserialize(fs), Group)
fs.Close()
End Sub
Private Sub serializer_UnknownNode _
(sender As object , e As XmlNodeEventArgs )
Console.WriteLine _
("UnknownNode Name: {0}", e.Name)
Console.WriteLine _
("UnknownNode LocalName: {0}" ,e.LocalName)
Console.WriteLine _
("UnknownNode Namespace URI: {0}", e.NamespaceURI)
Console.WriteLine _
("UnknownNode Text: {0}", e.Text)
Dim myNodeType As XmlNodeType = e.NodeType
Console.WriteLine("NodeType: {0}", myNodeType)
Dim myGroup As Group = CType(e.ObjectBeingDeserialized, Group)
Console.WriteLine("GroupName: {0}", myGroup.GroupName)
Console.WriteLine()
End Sub
End Class
' Paste this XML into a file named UnknownNodes:
'<?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" xmlns:coho = "http:'www.cohowinery.com"
'xmlns:cp="http:'www.cpandl.com">
' <coho:GroupName>MyGroup</coho:GroupName>
' <cp:GroupSize>Large</cp:GroupSize>
' <cp:GroupNumber>444</cp:GroupNumber>
' <coho:GroupBase>West</coho:GroupBase>
' <coho:ThingInfo>
' <Number>1</Number>
' <Name>Thing1</Name>
' <Glue>element</Glue>
' </coho:ThingInfo>
'/Group>
설명
기본적으로 메서드 XmlSerializer 를 호출한 Deserialize 후 알 수 없는 형식의 XML 노드를 무시합니다. 그러나 이 이벤트를 사용하여 이러한 노드 형식을 처리할 수 있습니다.