2017-04-25 3 views
0

akka.net永続性を使用して、いくつかのメッセージタイプをSQL Serverデータベースに格納しました。そしてそのビジネスシナリオでは、それは機能します。他のケースでは、私はちょうどC#.netを使用してメッセージを非直列化し、akka.netなしのメッセージプロパティを見たいと思っていました。どうすればそれが可能でしょうか?C#を使用してakka.net永続性メッセージをデシリアライズする

+0

イベントをSQL Serverにシリアル化するために使用したシリアライザはどれですか? – Horusiath

+0

私は今までにakka.netに付属しているデフォルトのシリアライズを使用しました –

答えて

0

設定済みのSQLジャーナルを使用すると、すべてのイベントデータは、イベントソースに使用されるテーブルのPayload列(SQLServerではデフォルトでdbo.EventJournal)にシリアル化されたバイナリとして格納されます。今後、選択したデータベースがその形式をサポートする場合、この形式をバイナリ形式からJSON形式に変更する可能性があります。

使用するシリアライザに応じて、ペイロード列の内容を単純にデシリアライズするだけで元のイベントを取得できます。 デフォルトのシリアライザは使用しないでください。既に行っている場合は、v1.2の時点ではJSON.NETです。最も顕著なの(機能をタグ付けすることによって使用される)イベントとの合計順序のようなものを記述したイベントジャーナルテーブルキャリーメタデータの

byte[] payload = ...; // get bytes from Payload column 
var settings = new JsonSerializerSettings {PreserveReferencesHandling = PreserveReferencesHandling.Objects}; 
using (var stream = new MemoryStream(payload)) 
using (var reader = new StreamReader(stream)) 
{ 
    var domainEvent = JsonConvert.DeserializeObject(reader.ReadToEnd(), settings); 
} 

その他のフィールドは、永続ID:あなたは、単に保存オブジェクト参照(PreserveReferencesHandling.Objects)とJsonConvertを使用して、それをデシリアライズすることができます特定のイベント(単一のアクターのコンテキスト内で単調に増加している)のシーケンス番号とを含むことができる。

関連する問題