Как десериализовать CommandResult? - PullRequest
1 голос
/ 28 декабря 2011

Я использую 10Gen официальный драйвер c #, и я напрямую использую метод RunCommand и получаю CommandResult, но я не могу десериализовать.

var commandResult = db.RunCommand(command);

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

1 Ответ

1 голос
/ 28 декабря 2011

Можете ли вы предоставить больше информации? Какую команду вы выполняете?

Возможно, вы просто хотите запросить коллекцию сообщений, и в этом случае вам следует использовать метод 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 предоставляет необработанный документ BSON, возвращенный через свойство Response, а затем знание того, как отделить ответ. Например:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...