将 ExpandoObject 持久保存到 MongoDB

发布于 2024-10-18 09:32:55 字数 664 浏览 1 评论 0原文

我有一个具有任意数量属性的 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() 时,我收到以下异常:当状态为:初始时,无法调用 WriteInt32。

我所知道的唯一 WrtieInt32 是 Marshall 类的静态方法。我这样做是错误的吗?

I have an ExpandoObject with an arbitrary number of properties. I want to persist those properties to a MongoDB database as a BsonDocument. I try to do so with the following code:

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;
}

However, on calling the extension method ToBson() on object, I receive the following exception: WriteInt32 cannot be called when State is: Initial.

The only WrtieInt32 I know is a static method of the Marshall class. Am I approaching this wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冬天旳寂寞 2024-10-25 09:32:55

这很简单。 ExpandoObject 继承了 IDictionary,它可以开箱即用地与 BsonDocument 配合使用。

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

It's very simple. ExpandoObject inherits IDictionary which works with BsonDocument out of the box.

dynamic data = new ExpandoObject();
var doc = new BsonDocument(data);
collection.Save(doc);
白况 2024-10-25 09:32:55

您也可以尝试使用

BsonValue.Create(stat.Value)

Also you can try to use

BsonValue.Create(stat.Value)
一个人练习一个人 2024-10-25 09:32:55

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

someObject
{
      dynamicArray:
      {
           item : { Key: "Name", Value: "Jekke", Type:String }
           item : { Key: "Age", Value: "40", Type:int }
           item : { Key: "City", Value: "New York", Type:String }
      }
}

May be it will be better to use Array of dynamic objects.
some thing like this:

someObject
{
      dynamicArray:
      {
           item : { Key: "Name", Value: "Jekke", Type:String }
           item : { Key: "Age", Value: "40", Type:int }
           item : { Key: "City", Value: "New York", Type:String }
      }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文