XmlSerializer.UnknownAttribute 事件

定義

當還原序列化期間,XmlSerializer 遭遇未知型別的 XML 屬性時發生。

C#
public event System.Xml.Serialization.XmlAttributeEventHandler UnknownAttribute;

事件類型

範例

下列範例會列印還原序列化 XML 檔時所遇到的任何未知屬性相關資訊。

C#
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();
    }
}

備註

根據預設,在呼叫 Deserialize 方法之後,會 XmlSerializer 忽略未知類型的 XML 屬性。 不過,您可以使用這個事件來處理這類節點類型。

如果要還原序列化的類別實例包含傳回物件 XmlAnyAttributeAttribute 陣列且已套用至欄位的 XmlAttribute 欄位, UnknownAttribute 則不會發生此事件。 相反地,所有未知的 XML 屬性都會收集到陣列中。

適用於

產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

另請參閱