2012-01-10 11 views
3

JavaScriptクライアントを使用してアプリケーションのバックエンドに電源を供給するためにNServiceBusを使用しています。したがって、私たちのコマンド が動的リスト(JSのオブジェクト配列、C#のList)を本当に必要とするケースがたくさんあります。例えば:リスト<dynamic> NServiceBusメッセージ

JSON:

{ 
    "listProperty" : [ 
     { 
      "propertyA" : "value", 
      "propertyB" : "valueB" 
     }, 
     { 
      "propertyQ" : "valueQ" 
     } 
    ] 
} 

のC#:

class TheCommand : IMessage { 
    public List<dynamic> ListProperty {get; set;} 
} 

NServiceBusでこれを行う方法はありますか?

-----実験はNServiceBusからXMLシリアライザといくつかの実験は、それがダイナミクスを理解していないことを示して -----

結果:

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

彼らは単にシリアライズ(およびデシリアライズ)を行います。

(ヤフーグループとのクロスポストのこのビット同様。)

答えて

1

私たちのJSクライアントでは、我々はシリアライズとNSBに渡すメッセージを処理RESTスタイルのサービスのセットを使用します。私たちは常に可変長配列を渡します。

ダイナミック構造体を一括して参照すると、NSBはハンドラをアクティブ化するために特別にフォーマットされたメッセージを必要とします。独自のシリアライザを実装することをお勧めします。 NServiceBus.Serialization.IMessageSerializerを実装する必要があります。それを超えると、NSBにそのシリアライザを使用するように指示することができなければならず、それに沿って独自のカスタム設定を行うことができます。クラスConfigureXmlSerializerを見てください。

また、3.0ブランチにJSON/BSONシリアライザが実装されていることがわかりました。私はそれを使用したことはありませんが、それはあなたのニーズを満たすかもしれません。

+0

ああ、長さではなく、含まれているオブジェクト(タイプ)の構造は動的である必要があります。 – brendanjerwin

+0

動的構造にもっと多くの内容を含めるように答えを編集 –

+0

私たちは定義された構造を持っていますが、この特別なケースはスキルレス文書データベースへのアップサートです。文書の動的部分は単に通過して格納されます。 – brendanjerwin

関連する問題