Mongodb:将聚合框架结果转换为POCO的优雅方式

本文关键字:POCO 方式 转换 结果 框架 Mongodb | 更新日期: 2023-09-27 18:05:53

为了使这篇文章简短易懂,http://mikaelkoskinen.net/mongodb-aggregation-framework-examples-in-c/显示了我试图完成的一些内容。这个"ToDynamic"调用在聚合返回的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并对其进行反序列化之前,这是有效的。这组操作在"ToDynamic"调用时中断,因为它无法解析返回的ObjectId。

是否有人发现了一种持续成功的、优雅的方法,可以将聚合框架的结果转化为POCO?

Mongodb:将聚合框架结果转换为POCO的优雅方式

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

在下一行,JToken.Parse()将获取类似json但实际上是专有的字符串并尝试解析它。使用JToken.ReadFrom(myBsonReader)

可能会更好。
using (var reader = new BsonReader(inputStream))
{
    var json = (JObject)JToken.ReadFrom(reader);
}