5

任意の数のプロパティを持つ ExpandoObject があります。これらのプロパティを MongoDB データベースに BsonDocument として保持したいと考えています。私は次のコードでそうしようとします:

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継承。IDictionaryBsonDocument

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 に答える