反序列化子类时XmlSerializer触发UnknownAttribute/UnknownNode事件的原因
为什么XmlSerializer处理自身生成的含子类XML时会触发UnknownAttribute/UnknownNode事件?
这是XmlSerializer内部处理逻辑带来的副作用:
- 反序列化带
xsi:type的元素时,序列化器会先按基类结构尝试解析整个元素,这时它会把xsi:type识别为“未知属性”,因此触发UnknownAttribute事件。 - 但紧接着,序列化器会读取
xsi:type的值,切换到对应的子类类型重新解析整个元素,这时候它能正确识别所有内容,所以最终反序列化是成功的。
简单来说,这个事件触发是序列化器“先基类试解析,再切换子类重解析”流程的正常产物——第一次碰到xsi:type时还没切换到子类,所以误判为未知属性/节点,但后续逻辑会修正这个判断,不影响最终结果。
如果不想看到这些事件触发,可以:
- 注册事件处理器,在里面忽略
xsi:type相关的事件; - 初始化序列化器时,用
[XmlInclude]标记基类,明确告知所有可能的子类(不过部分场景下仍会触发,因为这是内部流程特性)。
内容的提问来源于stack exchange,提问作者qnyz
相关产品推荐
相关产品推荐

