XmlSerializer.UnknownElement 事件

定義

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

C#
public event System.Xml.Serialization.XmlElementEventHandler UnknownElement;

事件類型

範例

下列範例會從名為 UnknownElements.xml 的檔案還原序列化名為 Group 的類別。 每當在 類別中沒有對應成員的檔案中找到專案時,就會 UnknownElement 發生此事件。 若要嘗試此範例,請將下列 XML 程式碼貼到名為 UnknownElements.xml 的檔案中。

<?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">
  <GroupName>MyGroup</GroupName>
  <GroupSize>Large</GroupSize>
  <GroupNumber>444</GroupNumber>
  <GroupBase>West</GroupBase>
</Group>
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("UnknownElements.xml");
   }
   private void Serializer_UnknownElement(object sender, XmlElementEventArgs e){
      Console.WriteLine("Unknown Element");
      Console.WriteLine("\t" + e.Element.Name + " " + e.Element.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.UnknownElement+=new XmlElementEventHandler(Serializer_UnknownElement);
      // 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 屬性。 不過,您可以使用這個事件來處理這類節點類型。

備註

XmlAnyElementAttribute如果 套用至傳回物件陣列的 XmlElement 欄位,則會收集陣列中的所有未知專案。 在此情況下, UnknownElement 不會發生事件。

適用於

產品 版本
.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

另請參閱