c# – 实现IXmlSerializable时,如何仅覆盖ReadXml或WriteXml,而不是两者兼容?

前端之家收集整理的这篇文章主要介绍了c# – 实现IXmlSerializable时,如何仅覆盖ReadXml或WriteXml,而不是两者兼容?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在一个类上实现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之一的详细信息.

原文链接:https://www.f2er.com/csharp/97401.html

猜你在找的C#相关文章