XmlSerializer 的 UnknownNode 和 UnknownAttribute 事件用于捕获反序列化时类中无对应成员的 XML 节点或属性,仅在调用 Deserialize 且遇到多余元素或属性时触发,不用于修复缺失字段,也不在序列化或类型转换错误时触发。

XmlSerializer 的 UnknownNode 和 UnknownAttribute 事件,是用来捕获反序列化时遇到的、类定义中没有对应成员的 XML 节点或属性的机制。它们不是用来“修复”缺失字段,而是帮你感知和调试结构不匹配问题,或实现柔性解析(比如跳过未知内容、记录日志、动态处理扩展字段)。
什么时候会触发这两个事件
只有在调用 Deserialize 方法反序列化 XML 字符串/流时,且 XML 中存在以下情况,才会触发:
-
UnknownNode:遇到类中没有对应 public 字段/属性的元素(比如多了一个
<version>1.2</version>,但你的类没写public string Version { get; set; }); -
UnknownAttribute:遇到类中没有对应 public 属性标记 XmlAttribute 的属性(比如 XML 是
<user id="100">...</user>,但类里没写[XmlAttribute("id")] public string Id { get; set; })。
注意:这两个事件 不会触发 在序列化(Serialize)过程中;也不会在节点/属性类型不匹配(如字符串赋给 int 字段)时报错时触发——那种情况直接抛异常,不走 Unknown 事件。
怎么订阅和使用事件
订阅方式很简单:在创建 XmlSerializer 实例后,给两个事件加处理方法,再调用 Deserialize:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~