XmlSerializer.UnknownNode 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
當還原序列化期間,XmlSerializer 遭遇未知型別的 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>
備註
根據預設,呼叫 Deserialize 方法之後,會 XmlSerializer 忽略未知類型的 XML 節點。 不過,您可以使用此事件來處理這類節點類型。