实现IXmlSerializable时,如何只覆盖ReadXml或WriteXml而不是两者?

我想在类上实现IXmlSerializable,只覆盖ReadXml或WriteXml,但不能同时覆盖它们。 如果我没有在这个类上实现IXMLSerializable,XMLSerializer会自动序列化所有成员。 我希望该默认行为适用于未覆盖的情况。 但是,由于IXmlSerializable是一个接口,而不是基类,我不知道如何去做。

另外,在一种情况下,我需要执行默认行为,并在完成时添加一些额外的代码。 所以,我想覆盖并回调’基类’行为。 同样,如果有一个基类,这将是微不足道的,但由于这是一个接口,因此不是那么微不足道。

谢谢!

在序列化/反序列化之前/之后执行动作的能力具有属性。 使用OnDeserializedAttribute标记一个方法,以便在反序列化实例后调用它,只需确保该方法具有正确的签名:

[OnDeserializedAttribute()] private void RunThisMethod(StreamingContext context) { // ... } 

NB。 此属性适用于Binary,SOAP和DataAttribute格式化程序,但不适用于XmlSerializer。 除了实现IXmlSerializable之外,没有任何属性或机制。

另外不要忘记您可以直接读取XML文档并编写代码(de)序列化。


原始答案:如果你需要完全覆盖序列化或反序列化之一(并因此实现IXmlSerializable那么你必须自己做两个。

可以使用属性和其他机制来避免使用IXmlSerializable ,您是否可以扩展问题,详细说明为什么需要实现ReadXmlWriteXml

您将需要实现这两种方法,但这是您的全部责任(就编译器而言)。 您可以在不使用的方法中返回null或抛出exception。

编辑

 我想要申请非重写案例的默认行为。 

你指的是什么默认行为? 由于您正在实现接口,因此没有默认行为。