将对象的实例克隆为其基本类型

Posted

技术标签:

【中文标题】将对象的实例克隆为其基本类型【英文标题】:Cloning an instance of object to its base type 【发布时间】:2012-02-18 13:04:58 【问题描述】:

我有以下课程:

public class AddCouponInfoRequest : namespace.Request 



我手上有一个 AddCouponInfoRequest 实例,我想获得一个具有相同值的 namespace.Request 实例。

这不能正常工作:

namespace.Request req = (namespace.Request)request;
string xml = req.SerializeToXml();

序列化后xml的值为:

AddCouponInfoRequest xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001 /XMLSchema-instance\">\r\n \r\n \r\n ...

我需要一个纯 namespace.Request 对象。最好的方法是什么?

提前致谢,

【问题讨论】:

【参考方案1】:

SerializeToXml 是一个虚方法,所以它总是调用被覆盖的方法是合乎逻辑的。

例如,您可以为 AddCouponInfoRequest 创建一个新方法

string SerializeToXmlAsParent()

    return base.SerializeToXml();

【讨论】:

其实我需要Request对象的实例。我进行序列化只是为了显示转换没有按预期工作。 您的示例中的序列化完全按照应有的方式工作。恐怕没有简单的一行代码方式来忽略被覆盖的虚拟方法。在您的情况下,您必须使用我建议的方法,然后将对象用作 Request 或者您可以创建 Request.BasicSerialize() 方法的一些变体并在 AddCouponInfoRequest 中覆盖它以调用 base.SerializeToXml() 然后你不必须将您的基类转换为 AddCouponInfoRequest。您使用虚拟方法与虚拟方法战斗:-)

以上是关于将对象的实例克隆为其基本类型的主要内容,如果未能解决你的问题,请参考以下文章

Clone的理解

java 克隆

Java -- 浅克隆和深克隆定义和实现

将对象数组转换为其原始类型的数组

String不是基本数据类型

javascript 中的原型继承