繁体   English   中英

将.dynamic对象插入.NET中的MongoDB中

[英]Insert `dynamic` object into MongoDB in .NET

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

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM