c# - 如何使用官方 MongoDB C# 驱动程序将 BsonDocument 转换为强类型对象?

标签 c# mongodb

出于单元测试的目的,我想测试我的类映射,而不是在 MongoDB 数据库中读取和写入文档。为了处理循环父/子引用和只读属性等特殊情况,我使用了 BsoncClassMap.RegisterClassMap< MyType>(...)一些自定义映射覆盖了默认 AutoMap();生成的映射。

有谁知道如何在不往返数据库的情况下将 BsonDocument 转换为所需的强类型对象?驱动程序在往返数据存储时执行此操作。我的目标是使用 MongoDB C# 驱动程序在内部使用的相同逻辑来测试从 C# 域对象到/从 C# 域对象到 BsonDocument 的序列化。

我可以使用 Bson 扩展方法 ToBsonDocument()将 C# 对象转换为 BsonDocument?我缺少的部分是该过程的逆过程 - 本质上是 BsonDocument.ToObject< MyType>(); .

最新版本的官方 MongoDB C# 驱动程序可以做到这一点吗?看起来应该是这样 - 我想知道我是不是只是瞎了眼,错过了明显的东西。

最佳答案

MongoDB 驱动程序确实提供了一种从 Bson 反序列化为您的类型的方法。 BsonSerializer可以在 MongoDB.Bson.dll 中找到, 在 MongoDB.Bson.Serialization命名空间。

您可以使用 BsonSerializer.Deserialize<T>()方法。一些示例代码是

var obj = new MyClass { MyVersion = new Version(1,0,0,0) };
var bsonObject = obj.ToBsonDocument();
var myObj = BsonSerializer.Deserialize<MyClass>(bsonObject);
Console.WriteLine(myObj);

在哪里 MyClass被定义为

public class MyClass
{
    public Version MyVersion {get; set;}
}

我希望这会有所帮助。

关于c# - 如何使用官方 MongoDB C# 驱动程序将 BsonDocument 转换为强类型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375928/

相关文章:

c# - 使用 ASP.NET 的 Bitrix24 Rest API 发布请求

C# Xamarin iOS RegisteredForRemoteNotifications 从未触发

c# - WPF - 如何向标签添加效果(如阴影)

c# - 在 C++ 和 C# 应用程序之间进行异步通信的最简单方法是什么

java - 应用程序用户身份验证java mongodb模块

node.js - 错误: Cannot find module './models/modela'

c# - 如何逆时针旋转物体?

mongodb - 如何在 Meteor 中对 Collection.find({}) 结果中的数组进行合并和排序?

javascript - 更新 MongoDB 的路由和模型会删除数据或引发错误

node.js - Nodejs Rest API 与 mongoose 和 mongoDB