XmlSerializer.UnknownAttribute 事件

定义

XmlSerializer 在反序列化过程中遇到未知类型的 XML 特性时发生。

public event System.Xml.Serialization.XmlAttributeEventHandler UnknownAttribute;

事件类型

示例

以下示例打印有关反序列化 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();
    }
}

注解

默认情况下,在调用 Deserialize 方法后, 会 XmlSerializer 忽略未知类型的 XML 属性。 但是,可以使用此事件来处理此类节点类型。

如果正在反序列化的类的实例包含返回对象数组的 XmlAttribute 字段,并且 XmlAnyAttributeAttribute 已应用于该字段,则不会发生该 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

另请参阅