2

所以问题来了:我已经编写了一个应用程序来调用 Fedex运输API,但现在我还需要在运输请求之后立即发出单独的费率请求。(原因是我需要数据和指标的非帐户费率,但我没有获得第三方发货请求的任何费率)。当我创建费率请求时,我可以为简单的值做这样的事情:

raterequest.RequestedShipment.ServiceType = (rateReference.ServiceType)shiprequest.RequestedShipment.ServiceType;

但我不能对任何复杂类型执行此操作,例如:

raterequest.RequestedShipment.Shipper = (rateReference.Shipper)shiprequest.RequestedShipment.Shipper;

甚至像这样:

raterequest.RequestedShipment.Shipper.Address = (rateReference.Address)shiprequest.RequestedShipment.Shipper.Address;

...因为.Net 会抱怨它无法在船舶地址类型和费率地址类型之间进行转换(尽管它们是相同的)。我可以一次设置一个“raterequest”参数(即“Address.City”),但这很麻烦而且我最终想做一些更复杂的事情(即使用相同的请求参数调用多个API,而附加代码最少)。是否有任何通用解决方案,以便可以来回转换相同的复杂类型(但在不同的命名空间中)?

4

2 回答 2

1

Automapper擅长这种事情。当从一种类型复制到另一种类型时,它通常会做“明智的”事情,而当它没有做明智的事情(或需要一些荒谬的事情)时,您可以挂钩并定义应该发生的事情。

于 2012-06-11T18:05:58.207 回答
0

您可以定义自定义隐式转换运算符以在类似的 raterequest 和 shiprequest 类之间进行转换。

于 2012-06-11T18:09:46.683 回答