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

时间:2021-12-05 16:35:59

微软代码范例中的一个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

 [BsonIgnore]
public string BookId {
get{
return Id.ToString();
} set{
Id=new ObjectId(value);
}
}

OK. 完美。

然后,在百度上 以BsonIgnore关键字搜索一下,原来还有很多人处理按这种方法处理过同样的问题。