2

これが2つのBsonドキュメントのコレクションであるとしましょう

{
    "_id": "...",
    "name": "Test1",
    "sub": {
        "street": "134 Fake Street",
        "city": "NoWhere"
    }
},
{
    "_id": "...",
    "name": "Test2",
    "sub": {
        "height": "10",
        "width": "20",
        "sub2": {
            "type": "something"
        }
    }
}

ここで、最初のレベルは構造化されたクラスですが、サブレベルは完全に構造化されていない可能性があり、さらにいくつかのレベルの深さでネストされたドキュメントを持つことができます。

このドキュメントをC#クラスに逆シリアル化するにはどうすればよいですか?私が見たすべてのサンプルは、ネストされたドキュメントの構造を想定しています。

次のクラスはエラーを出します:

public class Report
{
    [BsonId]
    public ObjectId _id { get; set; }

    public string name { get; set; }

    public BsonDocument sub { get; set; }
}

データコントラクト名が「...」の「MongoDB.Bson.BsonString」と入力する必要はありません。DataContractResolverを使用するか、既知のタイプのリストに静的に不明なタイプを追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加します。

編集

私がやろうとしていることは、まったく意味がないかもしれません。1つのBsonDocumentを使用し、構造化クラスなしですべてを手動で処理する方がよいでしょうか。

4

1 に答える 1

3

表示されるエラーメッセージはC#ドライバーからのものではないと思います。スタックトレースを提供していただけますか?

私はあなたの問題を再現しようとしましたが、それは私のテストプログラムでうまくいきます。見る:

http://pastie.org/5032283

上記のテストプログラムによって挿入されたドキュメントは次のようになります。

> db.test.find()
{ "_id" : ObjectId("5075fc6ee447ad1354c1f018"), "name" : "John Doe", "sub" : { "x" : 1, "y" : 2 } }
>
于 2012-10-10T22:55:09.017 に答える