将ExpandoObject持久保存到MongoDB

Yes*_*ke. 5 c# mongodb expandoobject mongodb-.net-driver

我有一个具有任意数量属性的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;
}
Run Code Online (Sandbox Code Playgroud)

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

我所知道的唯一的WrtieInt32是Marshall类的静态方法.我接近这个错吗?

Rya*_*yan 9

这很简单.ExpandoObject继承IDictionary哪些BsonDocument是开箱即用的.

dynamic data = new ExpandoObject();
var doc = new BsonDocument(data);
collection.Save(doc);
Run Code Online (Sandbox Code Playgroud)


And*_*ich 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 }
      }
}
Run Code Online (Sandbox Code Playgroud)