4

これは左翼手ではかなりおかしいかもしれませんが、この膨大なクラスのセットを実装する前に、質問する必要があります。

基本的に、私は特定の軍事メッセージ形式をオブジェクトにデコードするバイナリメッセージパーサーを作成しています。問題は、文字通り何百もの異なるメッセージタイプがあり、それらが互いにほとんど共通点を共有していないことです。したがって、これを実装することを計画している方法は、何百もの異なるオブジェクトを作成することです。

ただし、メッセージ属性に共通点はありませんが、それらをデコードする方法はかなり単純で、パターンに従います。そのため、メッセージタイプごとにすべてのオブジェクトとデコードロジックを生成するコードジェネレーターを作成することを計画しています。

本当に素晴らしいのは、何らかのスキーマに基づいてオブジェクトを動的に作成する方法があった場合です。必ずしもXMLである必要はありませんが、XMLの操作は非常に簡単です。

これはC#で可能ですか?

インターフェイスを次のようにしたいと思います。

var decodedMessage = MessageDecoder.Decode(byteArray);

MessageDecoderがメッセージのタイプを把握し、適切なオブジェクトを返す場合。おそらく、MessageTypeプロパティなどを実装するインターフェイスが返されます。

基本的に私が疑問に思っているのは、MessageTypeプロパティを実装するMessageというオブジェクトを1つ持つ方法があるかどうかです。そして、MessageTypeに応じて、Messageオブジェクトはどのタイプのメッセージにも変換されるため、これらすべてのメッセージタイプの作成に時間を費やす必要はありません。

4

3 に答える 3

3

ExpandOobjectオブジェクトにフィールドを動的に追加できる場所。

良い出発点はここにあります。

于 2012-03-20T21:04:51.177 に答える
2

xsd.exeはあなたが探しているものですか?XMLファイルまたはスキーマを取得してc#クラスを生成できます。ただし、遭遇する可能性のある問題の1つは、軍のメッセージ形式の一部が非常に鈍感であるということです。非常に大きなコードファイルが作成される可能性があります。

于 2012-03-20T20:55:13.923 に答える
1

T4テンプレートを見てください。コードを記述してコードを生成でき、IDEに統合されており、非常に簡単です。

編集:割り当ての右側を静的に(コンパイル時に)入力する必要があるvarため、で求めていることを実行する方法はありません。varそのステートメントを動的に生成し、コンパイルして実行できると思いますが、それは非常に面倒なアプローチです。

すべてのメッセージタイプにXSDがある場合はxsd.exe、@jleが提案するように使用できます。そうでない場合、私は次のことに興味があります:

// Let's assume this works
var decodedMessage = MessageDecoder.Decode(byteArray);
// Now what?  I don't know what properties there are on decodedMessage, so I cant do anything with it.
于 2012-03-20T20:55:32.787 に答える