zoukankan      html  css  js  c++  java
  • 关于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写入数据库场景)

  • 相关阅读:
    HTML DOM Body vLink 属性
    HTML <dialog> 标签
    JavaScript atan() 方法
    HTML URL 编码参考手册
    HTML DOM dir 属性
    CSS3 小黄人案例
    CSS 之 圣杯布局&双飞翼布局
    CSS3 渐变
    浏览器前缀
    CSS3 弹性盒布局
  • 原文地址:https://www.cnblogs.com/liguo/p/3096646.html
Copyright © 2011-2022 走看看