11

Protobuf-Net を使用すると、パラメーターなしのコンストラクターを使用せずにクラスを逆シリアル化することはできないようですが、何か不足している可能性があります。

パラメーターなしのコンストラクターを持つ一部のクラスは必要ありません。使用できる属性やその他のテクニックはありますか?

4

2 に答える 2

13

現在、protobuf-net は、パラメーターなしのコンストラクターが機能することに依存しています。

ただし、そのコンストラクターはパブリックである必要はありません (呼び出す必要がある場合はリフレクションを使用します)。そのため、protobuf-net で使用するためだけに必要なプライベート コンストラクターを定義し (理由についてコメントを追加)、特定のシリアル化を処理できる場合があります。関連する問題があります。

これにより、API の残りの部分が「不正な」インスタンスを構築できなくなります。

Marc は、最も外側のメッセージ オブジェクトについて話しているのであれば、自分でオブジェクトを作成して Serializer.Merge を呼び出すこともできると指摘しています。ただし、オブジェクトを作成する必要がある場合 (現在 null インスタンスがあるため、またはリスト/配列内の新しい項目のため)、デフォルトのコンストラクターを探します。

于 2009-08-26T18:11:26.717 に答える
4

ShuggyCoUk は、パラメーターなしのコンストラクターを使用してそれについて正しいです。

ただし、完全を期すために、最も外側のメッセージ オブジェクトについて話している場合は、自分でオブジェクトを作成して を呼び出すこともできますSerializer.Merge。ただし、オブジェクトを作成する必要がある場合 (現在nullインスタンスがあるため、またはリスト/配列内の新しい項目のため)、デフォルトのコンストラクターを探します。

属性に何らかのマークアップを指定して、「経由で生のオブジェクトを作成するだけ」にすることもできると思いますFormatterServicesが、これは不要に感じられ (プライベート パラメーターなしのコンストラクターと比較して)、すべてのプラットフォーム (Silverlight、CF など) で機能しない可能性があります。おそらく問題です)。

于 2009-08-27T09:57:09.200 に答える