加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 实现IXmlSerializable时,如何仅覆盖ReadXml或WriteXml,而

发布时间:2020-12-15 18:03:35 所属栏目:百科 来源:网络整理
导读:我想在一个类上实现IXmlSerializable,只能覆盖ReadXml或WriteXml,但不能同时覆盖.如果我没有在这个类上实现I XMLSerializable,XMLSerializer会自动序列化所有成员.我想要这个默认行为来应用非覆盖的情况.但是,由于IXmlSerializable是一个接口,而不是一个基类
我想在一个类上实现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之一的详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读