如何反序列化命令结果

本文关键字:结果 命令 反序列化 | 更新日期: 2023-09-27 18:18:50

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

var commandResult = db.RunCommand(command);
list<Post> posts =  ??// how to deserialize to posts collection  

如何反序列化命令结果

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

也许您只想查询posts集合,在这种情况下,您应该使用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);