我正在使用10Gen官方c#驱动程序,我直接使用RunCommand方法并获取CommandResult,但我无法反序列化。
var commandResult = db.RunCommand(command);
list<Post> posts = ??// how to deserialize to posts collection
答案 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);