2017-07-26 54 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

相關問題