• 关于System.Web.Script.Serialization.JavaScriptSerializer序列化的数据再Mongodb.CSharp中使用问题


    最近项目中把业务对象System.Web.Script.Serialization.JavaScriptSerializer 序列成JSOn传到远程服务端后再反序列化Dictionary<string, object>对象,在调用Mongodb.Csharp 方法, var document = new BsonDocument().AddRange(dic2) 出现异常

    “ System.ArgumentException: .NET type System.Decimal cannot be mapped to a BsonValue.”

    最后发现JavaScriptSerializer 这个类反序列化后把业务对象中的小数的类型转为为“System.Decimal”类型了,Mongodb.CSharp 驱动无法映射到有效的mongodb数据类型,所以异常,.net JavaScriptSerializer反序列化后把业务对象中的小数的类型转为为“System.Decimal”类型,这样是不能跨平台兼容的,不知道这个功能这样设计啥意图,解决办法:

    1.ServiceStack.Text.TypeSerializer 序列化,传到远程再反序列化后得到的小数字段类型是“String"类型,这样Mongodb.CSharp就能识别了,正确插入到数据库了,顺便说下微软提供的几种序列化工具,无论速度,还是序列化的大小都是不尽人意,这方面遥遥领先的是google 的PB,ServiceStack.Text紧随其后 性能,平台兼容性都不错。

    2.给Decimal字段增加   [BsonRepresentation(BsonType.Double)] 特性(注:这种方式只能解决不通过序列化方式直接调用API写入数据库场景)

  • 相关阅读:
    Mongodb 查询时间类型
    Python更新所有pip package
    Python selenium on windows
    Redis cluster setup on windows
    CAP定理(theorem)
    error: Microsoft Visual C++ 14.0 is required when installing python package
    using RNGCryptoServiceProvider to generate random string
    <map>的使用
    二维vector的使用
    vector做形参时的三种传参方式
  • 原文地址:https://www.cnblogs.com/liguo/p/3096646.html
Copyright © 2020-2023  润新知