如何反序列化CommandResult?

时间:2011-12-27 23:24:43

标签: c# .net mongodb nosql

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

var commandResult = db.RunCommand(command);

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

1 个答案:

答案 0 :(得分:1)

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

也许您只想查询帖子集合,在这种情况下您应该使用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是Post实例的有效序列化,你可以像这样反序列化它:

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