我正在尝试从TestObject类设置ObjectId。唯一的问题是我不断获得异常,我无法调试此序列化过程。
我的MongoDB:
rand.nextInt(color.length)
解析'MongoDataSource'数据源时发生错误:调用数据检索方法时出错。
--- InnerException ---
反序列化类TestObject的Object属性时发生错误:无法从BsonType'Binary'反序列化'ObjectId'。
--- InnerException ---
无法从BsonType'Binary'反序列化'ObjectId'。
{
"_id" : LUUID("964c87a0-bf8a-1f4e-be85-7aadb5315adb")
}
如果我把它变成BsonType.Binary
解析'MongoDataSource'数据源时发生错误:调用数据检索方法时出错。
--- InnerException ---
调用目标抛出了异常。
--- InnerException ---
二进制不是ObjectIdSerializer的有效表示。
[DataObject]
public class TestObject
{
[BsonId]
[BsonElement("_id")]
public ObjectId ObjectId { get; set; }
}
答案 0 :(得分:1)
问题是Mongo集合中的字段存储为LUUID
(它是GUID),与ObjectId相比,它是一种完全不同的类型。
在地图类中,您定义了
[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
且其类型是受支持的类型之一的。