0

これを短く理解しやすくするために、http://mikaelkoskinen.net/mongodb-aggregation-framework-examples-in-c/は、私が達成しようとしていることの一部を示しています。この "ToDynamic" 呼び出しは、Aggregation から返される DateTime 値で中断します。

DateTime が必要であることを理解した上で、これを次のように変換することができました。

public static dynamic ToDynamic(this BsonDocument doc)
    {
        var json = doc.ToJson(new JsonWriterSettings { OutputMode = JsonOutputMode.TenGen });
        dynamic obj = JToken.Parse(json);
        return obj;
    }

これにより、このオブジェクトを JContainer に正常に変換でき、次を使用して解析できました。

returnApp = BsonSerializer.Deserialize(service.apps.ToString(), typeof(MyMongoObject));

これは、ObjectId を取得して逆シリアル化するまで機能していました。この一連の操作は、返される ObjectId を解析できなかったため、"ToDynamic" 呼び出しで中断されました。

Aggregation Framework の結果を POCO に変換する、継続的に成功するエレガントな方法を見つけた人はいますか?

4

1 に答える 1

0

この例の変数「json」には、ISODate()、BinData()、ObjectId() などの 10gen 固有の値が含まれます。JToken.Parse(txt) は、txt が bson ではなく、有効な json であることを期待していると思います。

次の行で、JToken.Parse() はその json のような、しかし実際には独自の文字列を取得し、それを解析しようとします。BsonReader を使用し、 JToken.ReadFrom(myBsonReader) を使用する方がよい場合があります。

using (var reader = new BsonReader(inputStream))
{
    var json = (JObject)JToken.ReadFrom(reader);
}
于 2013-04-02T17:43:00.123 に答える