2012-04-14 3 views
2

これは表面上の簡単な質問のようですが、私はこれについてコミュニティに連絡すると考えました。私はストリーム内の.NET型をシリアル化しているので、各型を一意に識別するための何らかの方法が必要であり、そのため、逆の型を逆シリアル化する方法を知っています。メッセージの種類を識別するために、整数を必要と属性を持つそれぞれのタイプ タイプを一意に識別するための最良の方法

  • は、完全修飾名をハッシュGUID
  • を使用除い#1と同じ操作を行います

    1. 注釈:私は、さまざまなアプローチを考えてきました

    私は属性を必要とせずにこれを行うことができます。整数を使用すると競合が発生しやすくなります。新しいタイプを作成するたびにGUIDを生成するのは面倒です。第3の選択肢は可能であると思われるが、やや孤立しているにもかかわらず、衝突の可能性がある。

    私ができるようにしたいのは、この一意性を決定的な方法で推測して、オブジェクトを何らかの形でマークしなくても、渡したり逆シリアル化したりできることです。既に既知の型を両方の両端に登録する方法があると仮定します。したがって、メッセージが送信される前に、両端にすでに許容可能な型のリストがあります。私がしたいのは、知られているタイプを登録するプロセスをより控えめにすることだけです。

    編集:必要な一意性を達成しながら、可能な限りワイヤで小さくしたいと思います。

    それはより詳細な情報を提供してください、あなたのケースに適合しない場合は、例えばType.GUID使用することができます

  • +2

    **完全修飾型名**を使用しないのはなぜですか?それは十分にユニークでなければなりません.... –

    +3

    異なるバージョンのアセンブリで同じタイプはどうでしょうか?それらを同じタイプまたは2つの異なるタイプとして識別しますか? –

    +0

    異なる名前の型を別々のアセンブリで扱うことをお勧めします。たぶん、そうではないかもしれません... –

    答えて

    2

    ... ...

    +0

    これはオプション#2と同じです。クラスに 'GuidAttribute'型のアノテーションを付ける必要があります。 [ここをクリック](http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.guidattribute.aspx) –

    +1

    @JohnHargrove提供したリンクから:*明示的なSystem.Guidを自動GUIDは望ましくありません。*これは属性なしで動作することを意味しますが、これはあなたのケースではうまくいくかどうかは、提供していないいくつかの側面によって決まります... – Yahia

    +0

    Aha、あなたは正しいです。面白い。それは再建によっても変わりません。私はこの魔法がどのように働くのだろう...? –

    1

    利用できるの回答に加えて、私は完全にquaifiedタイプ名を使用することをお勧めします。すでにアプリケーションドメイン内に一意性が保証されています。

    +0

    私が上に言及しなかったことの1つは、可能な限りワイヤー上で小さくなければならないということです。これが完全な型名をハッシュしたと言いました。...うーん。 –

    +1

    もう一つのことがありますまた、異なる*バージョンのアセンブリが2つある場合はどうなりますか?このようにすると、異なる型の結果になります。必要がない場合は、独自の型文字列を生成できます。バージョン情報はありません – Tigran

    +0

    ああ、あなたは正しいです面白いのですが、再構築でも変わりませんこの魔法の仕組みはなんで...? –

    関連する問題