Сериализация дополнительных элементов в экземпляр IDictionary с драйвером MongoDb C # - PullRequest
1 голос
/ 17 февраля 2012

Я недавно попытался поиграться с сериализацией MongoDb. По сути, я пытаюсь использовать сериализатор драйвера для хранения своих моделей, одновременно пытаясь избежать каких-либо зависимостей между моими известными классами моделей и драйвером MongoDb C # от 10gen (v1.2, если это имеет значение).

Само по себе это не проблема. Однако проблематично то, что может быть (динамическая) информация, хранящаяся для некоторых объектов рядом с известными элементами. Я мог бы сделать это с помощью атрибута [BsonExtraElements], но, как я уже сказал выше, я стараюсь не связывать свои модели с MongoDb. Модели классов, которые могут иметь такое поведение, реализуют определенный интерфейс:

public interface IHaveMoreInformation
{
    IDictionary<string, object> Extra { get; set; }
}

Для этого я попытался написать пользовательское соглашение, которое регистрируется в профиле соглашения при запуске приложения:

public sealed class ExtraElementsConvention : IExtraElementsMemberConvention
{
    #region Implementation of IExtraElementsMemberConvention

    public string FindExtraElementsMember(Type type)
    {
        return typeof(IHaveMoreInformation).IsAssignableFrom(type) ? "Extra" : null;
    }

    #endregion
}

Вот тут и начинается проблема. Драйвер ожидает свойство BsonDocument (опять же, я не хочу связывать). Я надеялся, что есть способ обойти это и сериализовать эту дополнительную информацию в экземпляр IDictionary<string,object>.

Мне пригодятся любые идеи для достижения этой цели.

Заранее спасибо,
Мэнни

1 Ответ

0 голосов
/ 18 февраля 2012

Изучив внутреннюю работу водителя, я решил обратиться к системе отслеживания проблем mongoDB.До сих пор (1.3.1) драйвер, похоже, очень хотел принимать только свойство BsonDocument для дополнительных элементов;это позволит эффективно связать модели с типами, объявленными драйвером, что немного затруднит, если вы решите переключить технологии.

В настоящее время здесь отслеживается проблема: https://jira.mongodb.org/browse/CSHARP-395

Надеемся,это улучшение войдет в 1.4 и поможет людям, желающим достичь чего-то подобного в будущем.

...