XmlSerializer.UnknownAttribute 事件   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当 XmlSerializer 在反序列化过程中遇到未知类型的 XML 特性时发生。
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 事件类型
示例
以下示例打印有关反序列化 XML 文档时遇到的任何未知属性的信息。
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
注解
默认情况下,在调用 Deserialize 方法后, 会 XmlSerializer 忽略未知类型的 XML 属性。 但是,可以使用此事件来处理此类节点类型。
如果正在反序列化的类的实例包含返回对象数组的 XmlAttribute 字段,并且 XmlAnyAttributeAttribute 已应用于该字段,则不会发生该 UnknownAttribute 事件。 而是将所有未知的 XML 属性收集到 数组中。