處理範例程式碼Webapi中的Mongodb的Bson中ObjectId反序列化異常

王偉曄發表於2018-12-03

微軟程式碼範例中的一個Bug 處理Mongodb的Bson中ObjectId反序列化異常

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-2.2&tabs=visual-studio-code

Dotnet core 2.1已推出有一段時間,asp.net提供了一段關於Webapi的範例,是使用Dotnet Core+Mongodb搭建Webapi,範例說可以完成Mongodb資料CRUD操作。 一切順利,按照範例搭建完成,驗證建立、查詢、刪除操作都正常,Update不正常。 報的是ObjectId型別轉換異常,直接將Get方法返回的資料貼回去都會報這個異常。 由於Dotnet core 還是新事物,網上資料少,沒有找到有價值的方案,所以打算自己嘗試。

由於是物件Id序列化的問題:

1、客戶端,Update的時候json不傳入Id,沒有報型別轉換異常,但Mongodb報錯。

2、所以想著直接用Url傳Id進入方法。(可行)

3、修改BookService在更新Mongodb的之前,將Id轉換為ObjectId然後不知到物件再更新,book.Id=new ObjectId(string);(可行) 到這一步已經個可以Update資料到Mongodb了,但是想將事情做得完美一點,畢竟傳輸的Json沒有ID,總覺得遺漏了什麼。

4、改造Model,將ObjectId的屬性增加一個標籤[JsonIgnore].(傳到客戶端的Id都沒有了) 5、Model增加一個xxxId getter  setter

 1 [BsonIgnore]
 2 public string BookId {   
 3   get{    
 4       return Id.ToString(); 
 5     }
 6 
 7  set{   
 8    Id=new ObjectId(value); 
 9  } 
10 }

 

OK. 完美。

然後,在百度上 以BsonIgnore關鍵字搜尋一下,原來還有很多人處理按這種方法處理過同樣的問題。

相關文章