0

为了使这个简短易懂,http ://mikaelkoskinen.net/mongodb-aggregation-framework-examples-in-c/展示了我想要完成的一些事情。此“ToDynamic”调用在从聚合返回的日期时间值上中断。

在了解我们需要一个 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 并反序列化它。这组操作在“ToDynamic”调用中中断,因为它无法解析返回的 ObjectId。

有没有人找到一种将聚合框架结果转化为 POCO 的持续成功、优雅的方式?

4

1 回答 1

0

您示例中的变量“json”将包含 10gen 特定值,例如 ISODate()、BinData() 和 ObjectId()。我怀疑 JToken.Parse(txt) 期望 txt 是有效的 json,而不是 bson。

在下一行,JToken.Parse() 将采用该 json-like-but-actually-proprietary 字符串并尝试解析它。您最好使用 BsonReader 并使用 JToken.ReadFrom(myBsonReader)

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