我有一个复杂的模型,我想坚持到Mongo DB。这个模型有一些我不想打破的循环引用。
显然我不能用官方的Mongo C#驱动程序做到这一点。 Json.Net可以在Bson中正确序列化,并且可以毫无问题地处理我的模型。
我可以更改mongo驱动程序序列化程序吗?或者你有任何其他建议来处理这种情况(除了避免循环引用或忽略属性)?
谢谢。
答案 0 :(得分:3)
自定义序列化/反序列化是一个很好的解决方案,但它不一定非常痛苦。最简单的方法可能是您的模型使用ISupportInitialize接口,并实现BeginInit()和EndInit()方法。
Sergio Costa有一个很好的例子,可以使用这个界面来处理标题为Serializing circular references in MongoDb的网页上的循环引用。
答案 1 :(得分:2)
如果无法断开连接,则可以使用多种方法进行自定义序列化。
我从这里开始:http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/
特别是标题为“编写自定义序列化程序”的部分。您需要确定潜在的额外复杂性是否值得。
或者,您可以考虑将对象转换为json,然后转换为BsonDocument。
BsonDocument document = BsonDocument.Parse(json);
如果您确实需要这么做,请注意您正在使用Object-> JSON-> BsonDocument-> Bson路径进行相当大量的繁忙工作。如果您需要高吞吐量或关注CPU /内存利用率,则需要考虑这一点。