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?
示例中的变量'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);
}