2011-12-27 66 views
1

我正在使用10Gen官方的C#驅動程序,我直接使用RunCommand方法並獲取CommandResult,但我無法反序列化。如何反序列化CommandResult?

var commandResult = db.RunCommand(command); 

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

回答

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是郵政的一個實例的一個有效的序列化,你可以反序列化這樣的:

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

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