2013-06-28 7 views
0

У меня есть координаты, которые я читаю у MongoDB с помощью драйвера 10Gen. Проблема, с которой я сталкиваюсь, заключается в том, что глубина многомерных данных несовместима, и я ищу всеобъемлющую стратегию для решения этой проблемы.Как сериализовать многоразмерную массив JSON из MongoDB

Решение должно иметь возможность записать координаты обратно в MongoDB (сериализовать) в том же порядке и глубине, что и считывание (десериализация).

Два примера различной глубины:

Пример 1

 [ 
     [ [ [ 12, 33 ], [ 32, 23 ], [ 12, 32], [23, 12 ], [ 32, 32 ], [ 32, 2 ] ] ], 
     [ [ [35, 12 ], [ 53, 16 ], [ 22, 54 ], [ 2, 32 ], [ 32, 32 ] ] ] 
    ] 

Deserialize в:

public List<List<List<int>>> coordinates { get; set; } 

Пример 2

 [ 
     [ [ 2, 2 ], [120,12 ], [ 32,32 ], [ 32, 2 ], [ 3,2 ], [ 2, 3 ], [ 2, 1 ] ] 
    ] 

Deserialize в:

public List<List<List<List<int>>>> coordinates { get; set; } 

Моя первая мысль была написать собственный сериалайзер для чтения данных и выяснить глубину, а затем использовать метод обертки, чтобы скрыть фактические данные с точки зрения, например, GetNextCoordinate(), а затем функция GetNextCoordinate может вытащить данные из соответствующей структуры. Это кажется грязным, поэтому я ищу более общее решение.

Предположим, что свойство координат является частью конкретного класса и что коллекция в MongoDB содержит сочетание обоих типов координатных документов. Значение любого заданного запроса для MongoDB приведет к тому, что оба документа координируют оба или оба типа, и я не знаю перед выполнением запроса.

+0

Я не знаю, в чем проблема, которую вы там решаете, но для меня это не выглядит чистым. Если у вас есть списки списков, разве в данных нет какой-либо семантики? Нет ли способа убедиться, что каждый объект db имеет список координат и некоторые поля, которые можно использовать для поиска? – mnemosyn

+0

Согласен, однако источник данных находится вне моего контроля. – user2532019

ответ

0

Возможно, попробуйте http://www.codeproject.com/Articles/159450/fastJSON Он может сериализоваться и десериализоваться в списках. Я не знаю, может ли он делать списки в списках.

+0

У меня уже есть эта работа с помощью пользовательского сериализатора, который проверяет элементы и определяет, какой формат присутствует, но он и уродливый, и хрупкий. Надеюсь на общее решение, которое не так плохо пахнет. – user2532019

0

Я закончил тем, что написал пользовательский сериализатор/десериализатор BSON, который затем поддерживает переменные вложенные массивы.