私は同じ問題に直面していました。 MongoDBコードでデバッグした後、特定のタイプの代わりにインターフェイスを使用すると、別のシリアライザーが適用されることがわかりました。この場合、 DiscriminatedInterfaceSerializer インターフェースのシリアライザーとして使用されますが、 BsonClassMapSerializer 特定のタイプに使用されます。
インターフェイス用のこのシリアライザでは、実装クラスのクラスマップはインターフェイスにリンクされていません。したがって、Idがbson idフィールドであり、「_id」キーにマップする必要があることは認識されません。そのため、例外が発生します。
私のために働いた解決策は、 ImpliedImplementationInterfaceSerializerを使用することです :
[BsonSerializer(typeof(ImpliedImplementationInterfaceSerializer<IEntity, Entity>))]
public interface IEntity
{
// snip...
}
この属性はシリアライザーを登録し、Idプロパティが適切にマップされるようにIEntityのエンティティのbsonクラスマップを使用するように定義します。@ RobertBakerの回答のおかげで、このソリューションを見つけました:オブジェクトをMongoDBC#ドライバーとのインターフェースとして逆シリアル化>