微软代码范例中的一个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关键字搜索一下,原来还有不少人处理按这种方法处理过一样的问题。对象