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

时间:2012-02-17 10:59:48

标签: c# mongodb-.net-driver

我最近尝试过使用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>实例。

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

提前致谢,
曼尼

1 个答案:

答案 0 :(得分:0)

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

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

希望这种改进能够进入1.4并帮助那些希望在未来实现类似目标的人。