使用 MongoDB 的 C# 驱动程序将额外的元素序列化到 IDictionary 实例中



我最近尝试了一下MongoDb的序列化。基本上,我试图使用驱动程序的序列化程序来存储我的模型,同时试图避免我著名的模型类和10gen的MongoDb C#驱动程序(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>实例中。

我对实现这一目标的任何想法都很有帮助。

提前感谢,
曼尼

在研究了驱动程序的内部工作后,我决定将此事提交给mongoDB的问题跟踪系统。到目前为止(1.3.1),驱动程序似乎非常热衷于只接受额外元素的BsonDocument属性;这将有效地将模型与驱动程序声明的类型耦合起来,当您决定切换技术时,这有点麻烦。

目前正在此处跟踪此问题:https://jira.mongodb.org/browse/CSHARP-395

希望这种改进能达到1.4,并帮助人们在未来实现类似的目标。

最新更新