微軟代碼范例中的一個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關鍵字搜索一下,原來還有很多人處理按這種方法處理過同樣的問題。