2013-09-18 5 views
0

У меня есть динамический объект, который используется как параметр на ApiController. й:Вставить динамический объект в MongoDB в .NET

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

    public string Id { get; set; } 

    public string Type { get; set; } 
} 

Координаты для любой формы различна, круг будет иметь центр и радиус, линия имеет x1, y1, x2, y2 и т.д.

Я пытаюсь сохранить этот объект в Монго.

То, что я надеюсь на это:

{ 
    "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, что я хочу хранить значения динамического объекта?

+0

Не могли бы вы вставить код, который создает и заполняет, и экземпляр класса Shape? –

ответ

1

Динамический тип не поддерживается драйвером MongoDB C#, к сожалению. Но его планируется включить в v2.0.

Возможно, к концу года, вероятно, в сочетании с сервером 2.6.

Вы можете отслеживать эту проблему здесь и голосовать за эту функцию. https://jira.mongodb.org/browse/CSHARP-539

0

Сделав что-то подобное в другой базе данных NoSQL (FatDB), которая имеет аналогичные проблемы, вы рассматривали использование Json.NET сериализации его в строку и просто хранить строку в классе?

Если вы используете объект ExpandoObject (тип динамического объекта), вы можете его сериализовать, подбрасывая результаты в строку, которая идет в MongoDB, и вытаскивайте ее позже, используя uniqueId. Я не пробовал это специально с MongoDB, но в этот момент ваш динамический объект является не чем иным, как строкой. Когда вы вытаскиваете его, вы десериализуете JSON, и у вас есть свой ExpandoObject.

Смежные вопросы