2

我有一些具有自定义序列化程序的实体。

public class EntitySerializer : BsonBaseSerializer, IBsonIdProvider
{
   public override object Deserialize(MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options){
      ...
      bsonReader.ReadName(); // _id
      ObjectId id = bsonReader.ReadObjectId();
      ...
}
public override void Serialize(MongoDB.Bson.IO.BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
{
     ...
     bsonWriter.WriteObjectId("_id", ent.Id);
     ...
    }
}

....

BsonSerializer.RegisterSerializer(typeof(Entity), new EntitySerializer());

现在我想通过 LINQ 查询这个实体。

GetEntityCollection().AsQueryable<Entity>().Where(d=>d.Id==new ObjectId("51b8939d3f92b82db4ad1db0"))

这将返回以下错误

NotSupportedException: Unable to determine the serialization information for the expression: d.Id.

不使用自定义序列化程序时不会发生这种行为,所以我猜我忘记或错过了一些东西。搜索互联网并没有给我任何可以解决错误的东西。有人可以告诉我我缺少什么吗?


Google Groups 给出的解决方案:实现 IBsonDocumentSerializer。

4

1 回答 1

1

如果要序列化到文档,则自定义序列化程序需要实现 IBsonDocumentSerializer。如果它正在序列化为数组,则需要实现 IBsonArraySerializer。这些接口允许 Linq 使用自定义类。

于 2013-07-22T11:21:40.520 回答