我想在类上实现IXMLSerializable,并且只重写ReadXML或WriteXML,但不能同时重写两者。如果我没有在这个类上实现IXMLSerializable,XmlSerializer将自动序列化所有成员。我希望该默认行为应用于非重写的情况。但是,由于IXMLSerializable是一个接口,而不是基类,所以我不知道如何实现它。
另外,在一种情况下,我需要执行默认行为,完成后添加一些额外的代码。所以,我想重写并调用“基类”行为。同样,如果有基类,这将是微不足道的,但不是那么微不足道的,因为这是一个接口。
谢谢!

最佳答案

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

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

铌。此属性适用于二进制、soap和dataattribute格式化程序,但不适用于xmlserializer。除了实现IXmlSerializable之外,没有其他属性或机制。
也不要忘记,您可以直接读取XML文档,并编写代码(DE)序列化。
原始答案:
如果需要完全重写序列化或反序列化(从而实现IXmlSerializable),则必须同时执行这两项操作。
也许可以使用属性和其他机制来避免使用IXmlSerializable,您是否可以详细说明为什么只需要实现ReadXmlWriteXml中的一个。

08-25 23:46