如何将含有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<MyClass>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(c => c.Id));
cm.GetMemberMap<byte>(o => o.ByteItem).SetSerializer(new ByteSerializer());
});
完成这部份之后,以后就可以爽快的将数据结构上传到MongoDb了。
其他类似情况,例如 underlying为byte的enum等等
Have fun!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能