處理范例代碼Webapi中的Mongodb的Bson中ObjectId反序列化異常


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM