2013-05-19 54 views
0

我在c#中有一個方法,它將一組包含在一個類中的屬性推送到azure服務總線隊列。有太多類型需要推送,所以我編寫了一個方法,它使用匿名對象,並使用BrokeredMessaging類將其發送到服務總線隊列。沿着這條線將匿名對象發送到Azure中的服務總線隊列

東西:

//I intially used the string type to know what type of class is passed 
//and then using switch statement, handle each case accordingly. 
//But it becomes a very long list of switch statements and I don't want that. 
public static bool QueueUp(Object obj, string type) 
{ 
    var msg = new BrokeredMessage(obj); 
    _sendObjClient.Send(msg); 
} 

此代碼不能正常工作。我想通過傳入顯式類型的對象來保存調用此方法的許多位置;他們應該發送任何對象,並且我希望這部分代碼能夠完成艱苦的工作並將其序列化到隊列中。

剛剛介紹到System.Reflection命名空間,但我還沒有抓住如何實際實現我的目標。 任何幫助將不勝感激。

+0

你可能做錯了什麼。它應該適用於任何類型,並且應該從一個'object'自動地序列化類型。該類型應具有一些屬性,以允許序列化程序獲取需要序列化的內部狀態。你能解釋一下嗎:*「這段代碼不起作用。」*? – oleksii

+0

好的。它拋出了一個例外。讓我重新運行它,然後選擇它拋出的異常類型。 – olatunjee

+0

它拋出了一個'System.InvalidOperationException'異常。 – olatunjee

回答

0

你必須標記你的對象的可序列化類和屬性 - 從How to Use Service Bus Queues:發送到

消息(和接收)的服務總線隊列實例BrokeredMessage類 。 BrokeredMessage對象具有一組 標準屬性(如Label和TimeToLive),一個 用於保存自定義應用程序特定屬性的字典以及一個 任意應用程序數據的主體。應用程序可以通過將任何可序列化對象傳遞給BrokeredMessage的構造函數來設置消息的正文,然後使用適當的DataContractSerializer將 序列化該對象。或者,可以提供一個System.IO.Stream 。

然後查看SerializableAttribute Class學習如何你的類爲Serializable。

+0

現在的代碼工作正常。但是,如果我調試並檢查'msg'對象,我仍然會看到'System.InvalidOperationException'。不知道爲什麼。我正在使用最新版本的Azure SDK。 – olatunjee

相關問題