gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:47:37 26 4
gpt4 key购买 nike

我想在一个类上实现 IXmlSerializable,并且只覆盖 ReadXml 或 WriteXml,但不能同时覆盖两者。如果我没有在此类上实现 IXMLSerializable,XMLSerializer 将自动序列化所有成员。我希望该默认行为适用于未覆盖的情况。但是,由于 IXmlSerializable 是一个接口(interface),而不是基类,所以我不确定该怎么做。

此外,在一种情况下,我需要执行默认行为,并在完成后添加一些额外的代码。所以,我想重写并回调到“基”类行为。同样,如果有一个基类,这将是微不足道的,但不是那么微不足道,因为这是一个接口(interface)。

谢谢!

最佳答案

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

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

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

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


原回答:如果您需要完全覆盖序列化或反序列化之一(并因此实现 IXmlSerializable,那么您必须自己完成这两项工作。

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

关于c# - 实现 IXmlSerializable 时,如何只覆盖 ReadXml 或 WriteXml 而不是两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com