2012-02-17 40 views
1

我最近尝试过使用MongoDb的序列化。基本上,我试图使用驱动程序的序列化程序来存储我的模型,同时试图避免我熟知的模型类和10gen的MongoDb C#驱动程序(v1.2,如果有的话)之间存在任何依赖关系。使用MongoDb的C#驱动程序将额外元素序列化为IDictionary实例

这本身就不成问题。然而,问题在于可以为已知元素并排存储一些对象的(动态)信息。我可以通过使用[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>实例中。

我对任何想法都很有帮助。

由于提前,
曼尼

回答

0

寻找到驱动程序的内部工作之后,我决定把此事向MongoDB的问题跟踪系统。到目前为止(1.3.1),司机似乎非常热衷于只接受BsonDocument财产额外的元素;这将有效地将模型耦合到由驱动程序声明的类型,当您决定切换技术时这有点痛苦。

的问题,目前正在这里追踪: https://jira.mongodb.org/browse/CSHARP-395

希望这种改善将找到自己的方式到1.4,并帮助人们期待在未来实现类似的东西。

+1

作为对他人的一个提示,您现在可以指定额外的元素作为一个字典,如http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/ – 2013-10-21 17:32:08

相关问题