设为首页 加入收藏

TOP

如何将含有byte数据项的结构存入MongoDb
2015-11-21 01:53:34 来源: 作者: 【 】 浏览:0
Tags:如何 含有 byte 数据 项的 结构 存入 MongoDb

我们知道MongoDb不支持byte(BsonType中根本没有定义byte), 但是在实际生产环境中数据结构(特别是远古时代的数据结构)往往包含byte数据项。
这时候无法保存原有的数据结构,一般会另外创建一个Wrapper结构(Wrapper内部将byte转为int等MongoDb可以识别的类型),最后将Wrapper存入MongoDb。

无疑,这种方法并不优雅。
(下面的方法实现于c#, MongoDb的驱动是2.0版本)
我们希望能够让MongoDb自动将byte转化为int,这样所有问题就引刃而解了。
用代码说话:

   class ByteSerializer :IBsonSerializer
    {

        public Type ValueType
        {
            get {
                return typeof(byte);
            }
        }

        public object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var b = (byte)context.Reader.ReadInt32();
            return b;
        }

        public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
        {
            context.Writer.WriteInt32((int)(byte)value);
        }
    }

上面的代码构建了一个针对byte的序列化类
随后我们在全局部分对目标结构“MyClass” 操作。

 BsonClassMap.RegisterClassMap
    
     (cm => { cm.AutoMap(); cm.SetIdMember(cm.GetMemberMap(c => c.Id)); cm.GetMemberMap
     
      (o => o.ByteItem).SetSerializer(new ByteSerializer()); });
     
    

完成这部份之后,以后就可以爽快的将数据结构上传到MongoDb了。
其他类似情况,例如 underlying为byte的enum等等
Have fun!

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇timesten备份还原 下一篇Hadoop集群硬盘故障分析与自动化..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: