我想在一个类上实现IXmlSerializable,只能覆盖ReadXml或WriteXml,但不能同时覆盖.如果我没有在这个类上实现I
XMLSerializable,XMLSerializer会自动序列化所有成员.我想要这个默认行为来应用非覆盖的情况.但是,由于IXmlSerializable是一个接口,而不是一个基类,我不知道该怎么做.
另外,在一种情况下,我需要执行默认行为,当它完成时,会添加一些额外的代码.所以,我想覆盖并回调“base”类的行为.再次,如果有一个基类,这将是微不足道的,但不是那么简单,因为这是一个接口.
谢谢!
解决方法
在序列化/反序列化之前/之后执行操作的能力具有属性.标记一个使用
OnDeserializedAttribute的方法,在一个实例被反序列化之后调用它,只需确保该方法具有正确的签名:
[OnDeserializedAttribute()] private void RunThisMethod(StreamingContext context) { // ... }
NB.此属性适用于二进制,SOAP和DataAttribute格式化程序,但不适用于XmlSerializer.除了实现IXmlSerializable之外,没有属性或机制.
还不要忘记,您可以直接读取XML文档并将代码写入(de)序列化.
原来的答案:
如果您需要完全覆盖序列化或反序列化(从而实现IXmlSerializable),那么您必须自己做.
可能使用属性和其他机制来避免使用IXmlSerializable,您是否可以扩展问题,其中包含为什么只需要实现ReadXml或WriteXml之一的详细信息.