如何反序列化CommandResult?

问题描述:

我正在使用10Gen官方的C#驱动程序,我直接使用RunCommand方法并获取CommandResult,但我无法反序列化。如何反序列化CommandResult?

var commandResult = db.RunCommand(command); 

list<Post> posts = ??// how to deserialize to posts collection 

你能提供更多的信息吗?你在运行什么命令?

也许你只是想查询职位集合,在这种情况下,你应该使用的FindAll方法来代替:

var server = MongoServer.Create("mongodb://localhost/?safe=true"); 
var database = server["test"]; 
var collection = database.GetCollection<Post>("posts"); 

var posts = collection.FindAll().ToList(); 

[编辑]

基于低于您的评论您正在使用的聚集框架(它尚未发布,但在主开发分支上可用)我可以提供一些额外的信息。

C#驱动程序尚不支持新的聚合框架,但由于它基于命令,所以即使在驱动程序正式支持它之前也可以使用它。关键是了解CommandResult公开通过Response属性返回的原始BSON文档,然后知道如何挑选响应。例如:

var commandResult = collection.RunCommand(aggregationCommand); 
var response = commandResult.Response; 
foreach (BsonDocument result in response["results"].AsBsonArray) 
{ 
    // process result 
} 

在上面的循环中,结果变量的类型是BsonDocument。假设这个BsonDocument是邮政的一个实例的一个有效的序列化,你可以反序列化这样的:

var post = BsonSerializer.Deserialize<Post>(result); 
+0

我actualy执行新的聚合框架管道命令,所以我不能够使用其他方法。 – AnyOne 2011-12-28 15:10:01