c# - 将 ExpandoObject 持久化到 MongoDB

标签 c# mongodb mongodb-.net-driver expandoobject

我有一个具有任意数量属性的 ExpandoObject。我想将这些属性作为 BsonDocument 保存到 MongoDB 数据库中。我尝试使用以下代码:

private BsonDocument GetPlayerDocument(IPlayer player)
{
    var ret = new BsonDocument();

    ret.Add("FirstName", player.FirstName).
        Add("LastName", player.LastName).
        Add("Team", player.Team).
        Add("Positions", new BsonArray(player.Positions));

    foreach (var stat in (IDictionary<String, Object>)player.Stats)
    {
        ret.Add(stat.Key, stat.Value.ToBson());
    }

    return ret;
}

但是,在对象上调用扩展方法 ToBson() 时,我收到以下异常:当 State 为:Initial 时无法调用 WriteInt32。

我知道的唯一 WrtieInt32 是 Marshall 类的静态方法。我是不是搞错了?

最佳答案

这很简单。 ExpandoObject 继承 IDictionary 可与 BsonDocument 一起使用。

dynamic data = new ExpandoObject();
var doc = new BsonDocument(data);
collection.Save(doc);

关于c# - 将 ExpandoObject 持久化到 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073209/

相关文章:

c# - 有没有一种方法可以使用一种方法来处理其他方法以避免代码重复?

ruby - 在 Chef 中,为什么没有挽救引发的异常?

c# - Mongodb C# 驱动程序 : view MQL bson query generated from linq

c# - 以编程方式打开和关闭 firefox

c# - Writeablebitmap.SaveJpeg 正在旋转我的图像 -90 度

c# - Enum 上的扩展方法 - 无法公开 Enum 本身的方法

java - MongoTemplate条件查询翻译似乎不正确

javascript - 如何使用node js从mongodb获取数据并将其显示在表格中?

C# : Retrieve array values from bson document

C# MongoDB 驱动程序 : Can I use generic type for BsonId?