将对象的实例克隆为其基本类型
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。您使用虚拟方法与虚拟方法战斗:-)以上是关于将对象的实例克隆为其基本类型的主要内容,如果未能解决你的问题,请参考以下文章