Я недавно попытался поиграться с сериализацией 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>
.
Мне пригодятся любые идеи для достижения этой цели.
Заранее спасибо,
Мэнни