Csharp/C#教程:如何使用官方MongoDB C#驱动程序将BsonDocument转换为强类型对象?分享


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

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

有没有人知道如何将BsonDocument转换为所需的强类型对象而不进行数据库往返? 当进出数据存储时,驱动程序正在执行此操作。 我的目标是使用MongoDB C#驱动程序在内部使用的相同逻辑来测试与C#域对象之间的序列化到BsonDocument。

我能够使用Bson扩展方法ToBsonDocument()将C#对象转换为BsonDocument吗? 我缺少的那个部分与过程相反 – 本质上是一个BsonDocument.ToObject();

这是官方MongoDB C#驱动程序的最新版本吗? 它似乎应该是 – 我想知道我是否只是失明并且错过了显而易见的事情。

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

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

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

MyClass定义为

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

我希望这有帮助。

如果您需要对象的一部分,例如:您有实体教师:

 public class Teacher { public string Mail {get; set;} public IEnumerable Courses {get; set;} public string Name {get; set;} } 

和实体课程:

 public class Course { public int CurseCode {get; set;} public string CourseName {get; set;} } 

而你只需要“教师”实体的“课程”,你可以使用:

 var db = conection.GetDatabase("school"); var collection = db.GetCollection("teachers"); // Or your collection Name string mailForSearch="teacher@school.com"; // param for search in linq var allCoursesBson = collection.Find(x => x.Mail == mailForSearch).Project(Builders.Projection.Include(x => x.Courses).Exclude("_Id")).ToList(); // allCoursesBson is BsonDocument list, then use a first BsonDocument an convert to string for convert to IEnumerable type with BsonSerializer.Deserialize string allCoursesText = resp.FirstOrDefault()[0].ToString(); IEnumerable allCourses = BsonSerializer.Deserialize>(allCoursesText); 

现在,您有一个来自taecher的课程列表,并将BsonDocument答案转换为“IEnumerable”。

如果要将从mongoDB获取的行映射到代码中的类,请直接进行如下操作

 //Connect and Query from MongoDB var db = client.GetDatabase("blog"); var col = db.GetCollection("users"); var result = await col.Find(new BsonDocument("Email",model.Email)).ToListAsync(); //read first row from the result var user1 = result[0]; result[0] would be say "{ "_id" : ObjectId("569c05da09f251fb0ee33f5f"), "Name" : "fKfKWCc", "Email" : "pujkvBFU@kQKeYnabk.com" }" // a user class with name and email User user = new User(); // assign User.Name = user1[1].ToString(); // user1[1] is "fKfKWCc" User.Email = user1[2].ToString(); // user1[2] is "pujkvBFU@kQKeYnabk.com" 

使用yield关键字可以根据需要返回数据。

上述就是C#学习教程:如何使用官方MongoDB C#驱动程序将BsonDocument转换为强类型对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public IEnumerable GetMongoFields(string collectionName) { var connectionString = ConfigurationManager.ConnectionStrings[DbConfig.GetMongoDb()].ConnectionString; var databaseName = MongoUrl.Create(connectionString).DatabaseName; MongoClient client = new MongoClient(connectionString); var server = client.GetServer(); var db = server.GetDatabase(databaseName); var collection = db.GetCollection(collectionName); var list = collection.FindAll().ToList(); yield return list.ToJson(); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/987103.html

(0)
上一篇 2021年12月22日
下一篇 2021年12月22日

精彩推荐