C# 将匿名对象发送到Azure中的服务总线队列

C# 将匿名对象发送到Azure中的服务总线队列,c#,asp.net-mvc-4,azure,C#,Asp.net Mvc 4,Azure,我在c#中有一个方法,它接受一组封装在类中的属性,并将其推送到azure服务总线队列。需要推送的类型太多了,因此我编写了一个方法,该方法接受匿名对象,并使用BrokeredMessaging类将其发送到服务总线队列 大致是这样的: //I intially used the string type to know what type of class is passed //and then using switch statement, handle each case accordingl

我在c#中有一个方法,它接受一组封装在类中的属性,并将其推送到azure服务总线队列。需要推送的类型太多了,因此我编写了一个方法,该方法接受匿名对象,并使用BrokeredMessaging类将其发送到服务总线队列

大致是这样的:

//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
名称空间,但我还没有掌握如何真正实现我的目标。
非常感谢您的帮助。

您必须将对象的类和属性标记为可序列化-从:

发送到(或从)服务总线队列的消息是实例 BrokeredMessage类的。BrokeredMessage对象具有一组 标准属性(如Label和TimeToLive),一个 用于保存自定义应用程序特定的属性,以及 任意应用程序数据。应用程序可以设置 通过将任何可序列化对象传递到 BrokeredMessage,然后相应的DataContractSerializer将 用于序列化对象。或者,System.IO.Stream可以 提供


然后复习,学习如何将类标记为可序列化。

您可能做错了什么。它应该与任何类型一起工作,并且应该从
对象
自动序列化类型。该类型应该具有一些属性,以允许序列化程序拾取需要序列化的内部状态。你能再解释一下吗:“这个代码不起作用了。”?好的。它抛出了一个异常。让我重新运行它,我将选择它抛出的异常类型。它抛出了一个
系统。InvalidOperationException
异常。通过查看这些异常,添加更多详细信息,如
消息
堆栈跟踪
,您可以找出错误所在。谢谢。我刚刚尝试现在运行我的工作者角色,并检查azure中的队列计数,它看起来确实在工作,消息被发送,工作者角色确实使用了它。然而,在进入代码时,我注意到检查时仍然存在
系统。InvalidOperationException
。很有趣,但我想知道一开始出了什么问题。代码现在运行良好。尽管如此,如果我调试并检查
msg
对象,我仍然会看到
System.invalidooperationexception
。不知道为什么。我正在使用最新版本的Azure SDK。