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

本文解决了一个在使用DotnetCore与MongoDB搭建WebAPI时遇到的ObjectId反序列化异常问题。通过调整Model层,使用BsonIgnore注解并自定义Id的getter和setter方法,实现了JSON中不包含Id字段,但仍能正确更新MongoDB数据的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/cgzwwy/p/10056794.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值