5

我有一个具有任意数量属性的 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 类的静态方法。我接近这个错误吗?

4

3 回答 3

9

这很简单。ExpandoObject继承IDictionary哪些BsonDocument开箱即用。

dynamic data = new ExpandoObject();
var doc = new BsonDocument(data);
collection.Save(doc);
于 2011-12-21T01:48:18.633 回答
1

你也可以尝试使用

BsonValue.Create(stat.Value)
于 2011-03-23T16:52:48.953 回答
0

使用动态对象数组可能会更好。像这样的东西:

someObject
{
      dynamicArray:
      {
           item : { Key: "Name", Value: "Jekke", Type:String }
           item : { Key: "Age", Value: "40", Type:int }
           item : { Key: "City", Value: "New York", Type:String }
      }
}
于 2011-02-22T08:18:35.043 回答