如何在 C# 中将 Fedex 托运请求类型转换(或转换)为费率请求类型

本文关键字:请求 转换 类型 费率 类型转换 中将 Fedex | 更新日期: 2023-09-27 18:36:53

所以问题来了:我已经编写了一个应用程序来调用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,只需最少的附加代码)。是否有任何通用解决方案,以便可以来回转换相同的复杂类型(但在不同的命名空间中)?

如何在 C# 中将 Fedex 托运请求类型转换(或转换)为费率请求类型

Automapper擅长这种事情。 当从一种类型复制到另一种类型时,它通常会做"明智的"事情,当它没有做明智的事情(或者需要一些无意义的事情)时,你可以钩住它并定义应该发生什么。

您可以定义自定义隐式强制转换运算符,以便在类似的费率请求和船请求类之间进行转换。