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

处理范例代码Webapi中的Mongodb的Bson中ObjectId反序列化异常的更多相关文章

  1. nodejs中使用mongodb quickstart

    nodejs中使用mongodb quickstart node 中使用mongodb的quick start.整理的官网crud简单例子. 在百度找了几篇帖子都有问题,所以直接看官网了. 连接Mon ...

  2. 在java中使用MongoDB数据库

    Java 安装 要想在 Java 程序中使用 MongoDB,需要先确定是否安装了 MongoDB JDBC 驱动,并且要在机器上安装了 Java.查看 Java 教程来确保在机器上安装好 Java. ...

  3. 如何在.Net中使用MongoDB

    最近在研究mongodb,针对.net 中使用mongodb的文章要么是早期的驱动版本,要么资料很少,所以写个随笔记录一下 本文主要记录 1.什么是MongoDB 2.MongoDB windows ...

  4. 在.Net Core中使用MongoDB的入门教程(一)

    首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的. 所以,在我们安装好了MangoDB后,就可以开始MangoDB的.N ...

  5. MongoDB 更新数组中的元素

    本文记录如何更新MongoDB Collection 中的Array 中的元素.假设Collection中一条记录格式如下: 现要删除scores 数组中,"type" 为 &qu ...

  6. Spring Boot 使用Java代码创建Bean并注册到Spring中

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/catoop/article/details/50558333 声明同一个类下的多个实例: packa ...

  7. MongoDB(六):使用C#代码连接并读取MongoDB数据库

    在上篇文章中,讲解了MongoDB的基本操作,包括增.删.改.查,但是这些操作都是在命令行模式下进行的,这篇文章中讲解如何使用C#程序连接到MongoDB数据库,并且读取里面的文档. 一.新建项目 新 ...

  8. MongoDB数据库设计中6条重要的经验法则

    Part 1 原文:6 Rules of Thumb for MongoDB Schema Design: Part 1 By William Zola, Lead Technical Support ...

  9. CentOS7.2中安装MongoDB

    MongoDB是由C++编写的NoSQL的分布式文件数据库,用的json格式的k-value存储方式. MongoDB官网 https://www.mongodb.com 一.下载和安装 下载完后文件 ...

随机推荐

  1. 死磕 java集合之PriorityBlockingQueue源码分析

    问题 (1)PriorityBlockingQueue的实现方式? (2)PriorityBlockingQueue是否需要扩容? (3)PriorityBlockingQueue是怎么控制并发安全的 ...

  2. mqtt服务器apollo的搭建和测试工具paho的使用

    (1)前言 MQTT协议是IBM开发的一个即时通讯协议; 基于发布/订阅的消息协议,近些年来被广泛应用于能源.电力.....等硬件性能低下的远程设备,此外国内很多企业使用MQTT作为android手机 ...

  3. 「拥抱开源, 又见 .NET」系列第三次线下活动简报

    「拥抱开源, 又见 .NET」 随着 .NET Core的发布和开源,.NET又重新回到人们的视野. 自2016年 .NET Core 1.0 发布以来,其强大的生命力让越来越多技术爱好者对她的未来满 ...

  4. Element-ui使用技巧

    使用第三方字体包 把下载后的*.zip字体包放到项目中在main.js中引用. import "@/assets/font/iconfont.css"; 注意一定要放到elemen ...

  5. 面向对象之三个基本特征(javaScript)

    1. 前言 2. 封装 3. 继承 4. 多态 5. 总结 1. 前言 了解过面向对象的同学应该都知道,面向对象三个基本特征是:封装.继承.多态,但是对于这三个词具体可能不太了解. 2. 封装 在说封 ...

  6. Shiro详解

    Shiro Shiro集成Spring 加入Spring和Shiro的jar包 配置Spring及SpringMVC 参照:官方给出的案例shiro\samples\spring Shiro集成Web ...

  7. eclipse中运行出错:无法初始化主类的解决办法

    问题描述:eclipse中运行程序时,出现如下错误 解决办法: 出现此类:无法初始化主类有可能是因为eclipse中Java的版本与JDK的版本不匹配,我开始用的时候eclipse中用的是Java s ...

  8. Java的内存泄露

    Java的内存泄露 1.静态集合类引起内存泄漏 像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们 ...

  9. JQuery --- 第二期 (jQuery属性操作)

    个人学习笔记 1.JQuery的内容选择器 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  10. C语言多线程的一个简单例子

    多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...