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中存储具有多态值的字典所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)