zoukankan      html  css  js  c++  java
  • 处理范例代码Webapi中的Mongodb的Bson中ObjectId反序列化异常

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

  • 相关阅读:
    Excel 2007中忘记保护工作表密码的解决
    厦门高崎机场Wifi测试
    Windows 7下无法使用NetMeeting的共享功能的解决
    使用Winacq获取磁盘镜像
    USB 3.0 Test
    Tips:Windows 7的应用程序兼容性和絮叨的应用程序兼容性助手
    The requested resource is in use的解决方法
    运行时创建HTTP请求及请求的处理
    XML操作示例
    iframe自动适应页面
  • 原文地址:https://www.cnblogs.com/cgzwwy/p/10056794.html
Copyright © 2011-2022 走看看