2012-02-28 9 views
18

に戻す方法BsonDocumentオブジェクトをサーバーから取得した後にクラスに逆シリアル化するにはどうすればよいですか?BsonDocumentオブジェクトを逆シリアル化してクラス

QueryDocument _document = new QueryDocument("key", "value"); 
MongoCursor<BsonDocument> _documentsReturned = _collection.FindAs<BsonDocument>(_document); 

foreach (BsonDocument _document1 in _documentsReturned) 
{ 
    //deserialize _document1 
    //? 
} 

BsonReaderを使用して逆シリアル化しますか?

答えて

50

3つの方法が実際にあります。

BsonSerializer.Deserialize<MyType>(doc); 

3.Map BSON:あなたはBsonSerializer経由FindAs<>

var docs = _collection.FindAs<MyType>(_document); 

2.Deserialize文書に直接ロードする

1.Specifyタイプは手動でクラスに文書を送信してください:

var myClass = new Mytype(); 
myClass.Name = bsonDoc["name"].AsString; 

ほとんどの場合、最初のアプローチでは問題ありません。しかし、文書が構造化されていないときは、第3のアプローチが必要になることがあります。

+0

Class1クラスのProperty1プロパティを逆シリアル化するときにエラーが発生しました。CurrentBsonTypeがStringの場合のみReadStringを呼び出すことができます。CurrentBsonTypeがObjectIdの場合は呼び出されません。私はbson objectidをクラスのguidに置き、クラスをマップしました。私はこれをどのように修正すべきですか? – iefpw

+0

@iefpw:エラーは、データベースとクラス(データベースのobjectIdとクラスの文字列)に異なるタイプのProperty1があると言っています。 –

+0

私は間違ったクラスにデシリアライズしようとしていました。 "ObjectId Id {get; set;}をクラスに追加すると、基本的にすべてがクラスマッピングなしで機能します。 – iefpw