如何反序列化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);
我actualy执行新的聚合框架管道命令,所以我不能够使用其他方法。 – AnyOne 2011-12-28 15:10:01