微軟代碼範例中的一個Bug 處理Mongodb的Bson中ObjectId反序列化異常json
https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-2.2&tabs=visual-studio-codevisual-studio-code
Dotnet core 2.1已推出有一段時間,asp.net提供了一段關於Webapi的範例,是使用Dotnet Core+Mongodb搭建Webapi,範例說能夠完成Mongodb數據CRUD操做。 一切順利,按照範例搭建完成,驗證建立、查詢、刪除操做都正常,Update不正常。 報的是ObjectId類型轉換異常,直接將Get方法返回的數據貼回去都會報這個異常。 因爲Dotnet core 仍是新事物,網上資料少,沒有找到有價值的方案,因此打算本身嘗試。api
因爲是對象Id序列化的問題:app
一、客戶端,Update的時候json不傳入Id,沒有報類型轉換異常,但Mongodb報錯。asp.net
二、因此想着直接用Url傳Id進入方法。(可行)visual-studio
三、修改BookService在更新Mongodb的以前,將Id轉換爲ObjectId而後不知到對象再更新,book.Id=new ObjectId(string);(可行) 到這一步已經個能夠Update數據到Mongodb了,可是想將事情作得完美一點,畢竟傳輸的Json沒有ID,總以爲遺漏了什麼。spa
四、改造Model,將ObjectId的屬性增長一個標籤[JsonIgnore].(傳到客戶端的Id都沒有了) 五、Model增長一個xxxId getter setter.net
1 [BsonIgnore] 2 public string BookId { 3 get{ 4 return Id.ToString(); 5 } 6 7 set{ 8 Id=new ObjectId(value); 9 } 10 }
OK. 完美。code
而後,在百度上 以BsonIgnore關鍵字搜索一下,原來還有不少人處理按這種方法處理過一樣的問題。對象