在.NET中的MongoDB中插入“动态”对象



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

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 我要存储动态对象的值?

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

可能

到年底,可能与服务器 2.6 结合使用。

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

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

如果你使用ExpandoObject(一种动态对象),你应该能够序列化它,将结果扔到一个字符串中,进入MongoDB并在以后使用uniqueId将其拉出。 我没有专门尝试过MongoDB,但是在这一点上,您的动态对象只不过是一个字符串。 当你把它拉出来时,你反序列化JSON,你得到了你的ExpandoObject。

相关内容

  • 没有找到相关文章

最新更新