1

ISerializable を実装し、BinaryFormatter を使用してシリアル化を使用するプロジェクトがあります。BinaryFormatter クラスを持たない .net コンパクトに移行しています。ProtoBuf-Net を使用できるかどうか疑問に思っていました。シリアル化に GetObjectData() を使用するように ProtoBuf-Net に指示できますか? 具体的には、Serializer.Serialize(SerializableInfo, ISerializable) 関数の使い方を知りたいです。

追加されたソースコードを見たところ、関数

Serializer.Serialize(SerializableInfo, T t) where T is ISerializable は、制約 T is ISerializable をまったく使用しません。T が ISerializable であると宣言されたのはなぜですか?

4

1 に答える 1

2

このISerializableサポートは、(現時点では) 使用する既存の API の途中に protobuf-net を挿入するためのメカニズムとして存在しますBinaryFormatter。たとえば、.NET リモート処理または (シリアル化された) セッション状態のオーバーヘッドを削減するためにこれを行うことができます。ただし、これでもBinaryFormatterラッパーの途中で pb-net BLOB が発生します (特に、bf ヘッダーは具象型の assembly-qualfied-name を指定します)。

制約に関する質問については、これは単に使用法をガイドするのに役立ちます。この API は、 viaへのこのインジェクションの一部としてのみ使用されることを意図しています。それ以外の場合は、ベースの API を使用することをお勧めします。BinaryFormatterISerializableStream

CF を見ている場合は、もちろんBinaryFormatter役に立たなくなりますが、Streamベースの API は問題ありません。これは CF で動作しますが、多くのクラスを持つモデルの場合、ジェネリックの過剰使用 (「メソッドの欠落」など) が原因で、現在 CF にいくつかの不具合があることに注意してください。良いニュースは、これを廃止するいくつかのリファクタリングを順調に進めており、小さなフレームワークでより安定していることです。

于 2010-02-04T22:31:34.947 に答える