2017-07-26 18 views
0

我想从我的TestObject类设置ObjectId。唯一的问题是我不断收到异常,我无法调试这个序列化过程。二进制不是ObjectIdSerializer的有效表示

我的MongoDB:

{ 
    "_id" : LUUID("964c87a0-bf8a-1f4e-be85-7aadb5315adb") 
} 

在解析 'MongoDataSource' 数据源发生了一个错误:invaking数据检索方法时发生错误。

--- ---的InnerException

反序列化类的TestObject的对象属性时出现错误:无法从BsonType“二进制”反序列化“的ObjectId”。

--- ---的InnerException

不能反序列化 '的ObjectId' 从BsonType '二进制'。

[DataObject] 
public class TestObject 
{ 
    [BsonId] 
    [BsonElement("_id")] 
    public ObjectId ObjectId { get; set; } 
} 

如果我让一个BsonType.Binary而解决“MongoDataSource”数据源发生

一个错误:invaking数据检索方法中出错。

--- InnerException ---

异常已被调用的目标抛出。

--- ---的InnerException

二进制不是一个ObjectIdSerializer的有效表示。

[DataObject] 
public class TestObject 
{ 
    [BsonId] 
    [BsonElement("_id")] 
    [BsonRepresentation(BsonType.Binary)] 
    public ObjectId ObjectId { get; set; } 
} 
+0

也许不应该将其转换为ObjectId类型。换句话说,您正在对注释和序列化程序进行更改,但您忘记更改类本身中的“类型”属性。俗话说,有点像将一个方形钉塞入圆孔中。 –

回答

1

的问题是,蒙哥集内的字段(这是一个GUID),其是一个完全不同的类型相比,的ObjectId存储为LUUID

在您的映射类,你定义

[DataObject] 
public class TestObject 
{ 
    [BsonId] 
    [BsonElement("_id")] 
    public ObjectId ObjectId { get; set; } 
} 

当司机试图反序列化值964c87a0-bf8a-1f4e-be85-7aadb5315adb(一个GUID的字符串表示)失败。

好消息GUID附带的驱动程序的ID生成器,你可以很容易地只是按照驾驶员的约定达到预期的效果:

public class TestObject 
{ 
    public Guid Id { get; set; } // note the property is renamed in Id 
} 

official documentation可以省略[BsonId][BsonElement("_id")][BsonId(IdGenerator = typeof(GuidGenerator))]属性,只要因为该物业名为Id,其类型为受支持的物业之一。

+0

谢谢,我刚刚得到它的工作。 – StuiterSlurf

相关问题