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写入数据库场景)

  • 相关阅读:
    CacheHelper
    自动完成 或者动态匹配
    http://www.jb51.net/article/28619.htm
    http://www.kindsoft.net/docs/qna.html
    开发测试的理想模型
    关于浮点数的死区问题
    ZOJ Problem Set – 2321 Filling Out the Team
    Input类、四元数、
    忙蒙蔽了
    2014-03-28
  • 原文地址:https://www.cnblogs.com/liguo/p/3096646.html
Copyright © 2011-2022 走看看