处理范例代码Webapi中的Mongodb的Bson中ObjectId反序列化异常

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

相关文章
相关标签/搜索