使用C#在mongoDB中存储具有多态值的字典

使用C#在mongoDB中存储具有多态值的字典,第1张

概述让我们说我们有一个关键值,它们的意义上是多态的.考虑下一个示例项目: public class ToBeSerialized{ [BsonId] public ObjectId MongoId; public IDictionary<string, BaseType> Dictionary;}public abstract class BaseType{}p 让我们说我们有一个关键值,它们的意义上是多态的.考虑下一个示例项目:
public class ToBeSerialized{    [BsonID]    public ObjectID MongoID;    public IDictionary<string,BaseType> Dictionary;}public abstract class BaseType{}public class Type1 : BaseType{    public string Value1;}public class Type2:BaseType{    public string Value1;    public string Value2;}internal class Program{    public static voID Main()    {        var objectToSave = new ToBeSerialized                               {                                   MongoID = ObjectID.GenerateNewID(),Dictionary = new Dictionary<string,BaseType>                                                    {                                                        {"OdEd1",new Type1 {Value1="value1"}},{                                                            "OdEd2",new Type1 {Value1="value1"}                                                            }                                                    }                               };        string connectionString = "mongodb://localhost/Serialization";        var mgsb = new MongoUrlBuilder(connectionString);        var MongoServer = MongoDB.Driver.MongoServer.Create(mgsb.ToMongoUrl());        var MongoDatabase = MongoServer.GetDatabase(mgsb.Databasename);        MongoCollection<ToBeSerialized> mongoCollection = MongoDatabase.GetCollection<ToBeSerialized>("Dictionary");        mongoCollection.Save(objectToSave);        ToBeSerialized received = mongoCollection.FindOne();    }}

有时当我尝试反序列化它时,我会得到反序列化错误,例如“UnkNown discriminator value’具体类型的名称’”.我究竟做错了什么?如果每个值存储_t为什么它不能正确映射?

解决方法 驱动程序应该知道所有鉴别器以反序列化任何类而不会出错.有两种方法可以做到:

1.在应用启动期间全局注册:

BsonClassMap.RegisterClassMap<Type1>();BsonClassMap.RegisterClassMap<Type2>();

2.或者BsonKnownTypes attibute:

[BsonKNownTypes(typeof(Type1),typeof(Type2)] public class BaseType { }

如果您将使用#1或#2,则反序列化将正常工作.

总结

以上是内存溢出为你收集整理的使用C#在mongoDB中存储具有多态值的字典全部内容,希望文章能够帮你解决使用C#在mongoDB中存储具有多态值的字典所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1261208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存