2012-06-11 77 views
2

所以這裏的問題是:我已經寫了一個應用程序來調用聯邦快遞航運 API,但現在我還需要在發貨請求後立即請求一個單獨的速率請求。 (原因是我需要一個非帳戶費率的數據和指標,但我沒有得到任何費率的第三方裝運請求)。當我創建的速度要求,我可以做這樣的事情的簡單值:如何將Fedex傳送請求類型轉換(或轉換)爲C#中的速率請求類型?

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)。有沒有任何通用的解決方案,以便相同的複雜類型(但在不同的名稱空間)可以來回轉換?

+0

你確定它們是同一類型嗎?我不熟悉它們公開給你的.NET包裝器,但它們在兩個不同的命名空間中完全可能有兩個具有相同名稱的不同類型。 – Tejs

+0

需要更多信息。例如'RequestedShipment.Shipper'和'rateReference.Shipper'之間有什麼區別,爲什麼你不能直接使用'raterequest.RequestedShipment.Shipper.Address',因爲我沒有看到任何人可以回答你的問題。 –

+0

@Ramhound,因爲我正在尋找一種用於複雜類型轉換的通用解決方案。我會將其編輯到我的問題中。 – TheGerm

回答

1

Automapper擅長這種事情。它通常在從一種類型拷貝到另一種類型時做「明智的」事情,當它不做明智的事情(或者需要什麼荒謬的東西)時,你可以勾住它並定義應該發生的事情。

+0

這看起來很有希望。我會研究這個。謝謝。 – TheGerm

+0

這是迄今爲止我發現的最有前途的解決方案,所以我將其標記爲解決方案。 – TheGerm

0

您可以定義自定義的implicit轉換運算符,以在類似的raterequest和shiprequest類之間進行轉換。

+0

我一直希望有一些東西。另外,這些類是從WSDL創建的,所以編寫依賴這些類的東西有點脆弱。 – TheGerm