【问题标题】:Insert `dynamic` object into MongoDB in .NET在 .NET 中将“动态”对象插入 MongoDB
【发布时间】:2013-09-18 14:35:33
【问题描述】:

我有一个动态对象被用作ApiController 的参数。即:

public class Shape
{
    public dynamic Coordinates { get; set; }

    public string Id { get; set; }

    public string Type { get; set; }
}

任何形状的坐标都是不同的,圆有圆心和半径,直线有x1、y1、x2、y2等。

我正在尝试将此对象存储在 Mongo 中。

我希望的是:

{
    "Shapes": [
        {
            "Coordinates": {
                    "x1": 1,
                    "y1": 2,
                    "x2": 3,
                    "y2": 4
                }
            },
            "Type": "line"
        },
        {
            "Coordinates": "{ "x" : 10, "y" : 20, "r" : 30,},
            "Type": "circle"
        }
    ],
}

当我使用BsonExtensionMethods.ToJson(coordinates) 我得到

{
    "Shapes": [
        {
            "Coordinates": "{ \"x1\" : [], \"y1\" : [], \"x2\" : [], \"y2\" : [] }",
            "Type": "line"
        }
    ],
}

当我使用(JObject) coordinates 时,我得到:

{
    "Shapes": [
        {
            "Coordinates": {
                "_t": "Newtonsoft.Json.Linq.JObject, Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed",
                "_v": {
                    "x1": [

                    ],
                    "y1": [

                    ],
                    "x2": [

                    ],
                    "y2": [

                    ]
                }
            },
            "Type": "line"
        }
    ],
}

我宁愿不必将其存储为字符串。如何让 .NET 相信我要存储动态对象的值?

【问题讨论】:

  • 您介意粘贴创建和填充 Shape 类实例的代码吗?

标签: .net mongodb json.net .net-4.5 mongodb-.net-driver


【解决方案1】:

遗憾的是,到目前为止,MongoDB C# 驱动程序不支持动态类型。但计划包含在v2.0中。

可能在年底,可能与服务器 2.6 一起发布。

您可以在此处跟踪此问题并投票支持此功能。 https://jira.mongodb.org/browse/CSHARP-539

【讨论】:

    【解决方案2】:

    在具有类似问题的不同 NoSQL 数据库 (FatDB) 中做过类似的事情后,您是否考虑过使用 JSON.NET 将其序列化为字符串并将字符串简单地存储在一个类中?

    如果您使用 ExpandoObject(一种动态对象),您应该能够对其进行序列化,将结果放入一个字符串中,该字符串会进入 MongoDB,然后使用 uniqueId 将其提取出来。我没有专门用 MongoDB 尝试过,但那时你的动态对象只不过是一个字符串。当您将其拉出时,您将反序列化 JSON 并返回您的 ExpandoObject。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 2012-05-04
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      相关资源
      最近更新 更多