Eri*_*ric 11 .net c# xml serialization
我想在类上实现IXmlSerializable,只覆盖ReadXml或WriteXml,但不能同时覆盖两者.如果我没有在这个类上实现IXMLSerializable,XMLSerializer会自动序列化所有成员.我希望该默认行为适用于未覆盖的案例.但是,由于IXmlSerializable是一个接口,而不是基类,我不知道该怎么做.
另外,在一种情况下,我需要执行默认行为,并在完成时添加一些额外的代码.所以,我想覆盖并回调'基础'类行为.同样,如果有一个基类,这将是微不足道的,但由于这是一个接口,因此不是那么微不足道.
谢谢!
在序列化/反序列化之前/之后执行动作的能力由属性提供.使用OnDeserializedAttribute标记一个方法,以便在反序列化实例后调用它,只需确保该方法具有正确的签名:
[OnDeserializedAttribute()]
private void RunThisMethod(StreamingContext context) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
NB.此属性适用于Binary,SOAP和DataAttribute格式化程序,但不适用于XmlSerializer.除了实现IXmlSerializable之外,没有任何属性或机制.
另外,请不要忘记您可以直接读取XML文档并将代码写入(反)序列化.
原始答案:如果你需要完全覆盖序列化或反序列化之一(然后实现,IXmlSerializable那么你必须自己做两个.
有可能利用属性和其他机制来避免使用IXmlSerializable,你是否可以扩展问题,详细说明为什么你只需要实现一个ReadXml或多个WriteXml.