C# Azure服务总线:从对象创建BrokeredMessage

C# Azure服务总线:从对象创建BrokeredMessage,c#,azure,serialization,azureservicebus,C#,Azure,Serialization,Azureservicebus,我们正在将一个应用程序从使用MSMQ转换为Azure服务总线。我们有一个对象(消息、类型)如下所示: [Serializable] public class LeadSubmissionMessage { public long LeadId { get; set; } public long UserId { get; set; } public DateTime DateTime { get; set; } } [DataContract] [Serializabl

我们正在将一个应用程序从使用MSMQ转换为Azure服务总线。我们有一个对象(消息、类型)如下所示:

[Serializable]
public class LeadSubmissionMessage
{
    public long LeadId { get; set; }
    public long UserId { get; set; }
    public DateTime DateTime { get; set; }
}
[DataContract]
[Serializable]
public class EventMessageDto
{
    [DataMember]
    public Guid EventId { get; set; }

    [DataMember]
    public string EventType { get; set; }

    [DataMember]
    public string EventData { get; set; }
}
在从该对象创建BrokeredMessage时,起初我认为它可以工作,因为它已编译并且没有抛出运行时错误,但随后服务总线中没有显示任何消息。所以当我在调试中看到它时,我意识到它实际上并没有序列化对象

BrokeredMessage brokeredMessage = new BrokeredMessage(message); 

在查看时,我尝试了以下方法:

BrokeredMessage brokeredMessage = new BrokeredMessage(message, new DataContractSerializer(typeof(LeadSubmissionMessage)));  
但结果是一样的

我需要做什么才能使对象真正成为提交给消息的xml字符串

编辑:

我也试过这个。同样的结果:

[DataContract]
[Serializable]
public class LeadSubmissionMessage
{
    [DataMember]
    public long LeadId { get; set; }
    [DataMember]
    public long UserId { get; set; }
    [DataMember]
    public DateTime DateTime { get; set; }
}

您需要使用
[DataContract]
和希望随
[DataMember]

一起发送的每个属性来装饰您的消息类。我这样定义该类:

[Serializable]
public class LeadSubmissionMessage
{
    public long LeadId { get; set; }
    public long UserId { get; set; }
    public DateTime DateTime { get; set; }
}
[DataContract]
[Serializable]
public class EventMessageDto
{
    [DataMember]
    public Guid EventId { get; set; }

    [DataMember]
    public string EventType { get; set; }

    [DataMember]
    public string EventData { get; set; }
}
消息将使用以下内容创建:

var message = new BrokeredMessage(eventMessageDto, new DataContractSerializer(typeof(EventMessageDto)));

我正在使用这个nuget包:WindowsAzure.ServiceBus.3.3.1

请参见上面的编辑。这就是你的意思吗?我试过了,但得到了同样的结果。@CaseyCrookston是的,这就是我的意思。如果仍然无法传递消息,则问题可能出在其他地方,而不是序列化。调试器无法显示已发送消息的某些属性这一事实是意料之中的-
DeliveryCount
,并且只有在接收时才会初始化这些属性。如果你只是发送了一个字符串,而不是你的消息类-它会去什么地方吗?谢谢Daniel!时间太长了,我不记得这个问题的细节了,也不记得我是如何解决的。但我很高兴你找到了一个解决方案,并让它发挥作用,谢谢你添加了你的答案。