【问题标题】: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 对象。最好的方法是什么?

提前致谢,

【问题讨论】:

    标签: c# reflection clone object-object-mapping


    【解决方案1】:

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

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

    string SerializeToXmlAsParent()
    {
        return base.SerializeToXml();
    }
    

    【讨论】:

    • 其实我需要Request对象的实例。我进行序列化只是为了显示转换没有按预期工作。
    • 您的示例中的序列化完全按照应有的方式工作。恐怕没有简单的一行代码方式来忽略被覆盖的虚拟方法。在您的情况下,您必须使用我建议的方法,然后将对象用作 Request 或者您可以创建 Request.BasicSerialize() 方法的一些变体并在 AddCouponInfoRequest 中覆盖它以调用 base.SerializeToXml() 然后你不必须将您的基类转换为 AddCouponInfoRequest。您使用虚拟方法与虚拟方法战斗:-)
    猜你喜欢
    • 2020-06-28
    • 2015-09-23
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多