列表<;动态>;关于NServiceBus消息

列表<;动态>;关于NServiceBus消息,nservicebus,Nservicebus,我正在使用NServiceBus为应用程序的后端供电 JavaScript客户端。因此,在很多情况下,我们的命令 确实需要动态列表(JS中的对象数组,C#中的列表)。e、 g: JSON: C#: class命令:IMessage{ 公共列表ListProperty{get;set;} } 有没有办法用NServiceBus做到这一点 -----实验结果----- 使用NServiceBus的XML序列化程序进行的一些实验表明 它不了解动态: <TheCommand> <Li

我正在使用NServiceBus为应用程序的后端供电 JavaScript客户端。因此,在很多情况下,我们的命令 确实需要动态列表(JS中的对象数组,C#中的列表)。e、 g:

JSON:

C#:

class命令:IMessage{
公共列表ListProperty{get;set;}
}
有没有办法用NServiceBus做到这一点

-----实验结果-----

使用NServiceBus的XML序列化程序进行的一些实验表明 它不了解动态:

<TheCommand>
<ListProperty>
<Object>
</Object>
</ListProperty>
</TheCommand>

它们只是序列化(和反序列化)为对象,没有属性


(这与yahoo group也有点交叉。)

对于我们的JS客户端,我们使用一组REST风格的服务来处理序列化并将消息传递给NSB。我们一直传递可变长度数组

对于所有动态结构,NSB都要求对消息进行专门格式化,以激活其处理程序。实现自己的序列化程序可能是一个好主意。您必须实现
NServiceBus.Serialization.IMessageSerializer
。除此之外,您还必须能够告诉NSB使用该序列化程序,并且您可能有自己的自定义配置。查看类
配置XmlSerializer


我还看到在3.0分支中实现了一个JSON/BSON序列化程序。我从未使用过它,但它可能满足您的需要。

啊,不是长度,而是包含的对象(类型)的结构需要是动态的。编辑答案以包含更多关于动态结构的内容我们有一个已定义的结构,这种特殊情况是针对无模式文档数据库的upsert。文档的动态部分只是简单地传递和存储。我当然不是试图绕过NServiceBus提供的基于类型的路由,我只是需要负载的一部分是动态的。我明白了,我认为最简单的事情就是发送一个JSON块来避免任何序列化开销。
class TheCommand : IMessage {
    public List<dynamic> ListProperty {get; set;}
}
<TheCommand>
<ListProperty>
<Object>
</Object>
</ListProperty>
</TheCommand>