C# Mongodb—实体序列化OK,但给出';未找到类型为';反序列化时出错
我使用mongodb的c#驱动程序(v1.5)解决了这个问题 我在序列化对象时也遇到过类似的问题,但过去一直能够通过在应用程序启动期间向mongodb注册实体来解决问题。反序列化时遇到问题的文档嵌套在两个级别(即嵌入在文档中的文档中的文档) 这些类如下所示:C# Mongodb—实体序列化OK,但给出';未找到类型为';反序列化时出错,c#,mongodb,serialization,deserialization,C#,Mongodb,Serialization,Deserialization,我使用mongodb的c#驱动程序(v1.5)解决了这个问题 我在序列化对象时也遇到过类似的问题,但过去一直能够通过在应用程序启动期间向mongodb注册实体来解决问题。反序列化时遇到问题的文档嵌套在两个级别(即嵌入在文档中的文档中的文档) 这些类如下所示: [BsonIgnoreExtraElements] public class FooItem : IFooItem { [BsonId] public ObjectId Id { get; set; } public
[BsonIgnoreExtraElements]
public class FooItem : IFooItem
{
[BsonId]
public ObjectId Id { get; set; }
public IFooAccessRestrictions AccessRestrictions { get; set; }
}
public class FooAccessRestrictions : IFooAccessRestrictions
{
[BsonId]
public ObjectId Id { get; set; }
public IAccessPermission[] AccessList { get; set; }
}
public class AccessPermission : IAccessPermission
{
[BsonId]
public ObjectId Id { get; set; }
public DateTimeOffset CreatedOn { get; set; }
public ObjectId CreatedBy { get; set; }
public AccessPermissionType Type { get; set; }
public string PermittedIdentity { get; set; }
public AccessPermission()
{
}
public AccessPermission(ObjectId createdBy, AccessPermissionType type, string permittedIdentity)
{
CreatedOn = DateTime.Now;
CreatedBy = createdBy;
Type = type;
PermittedIdentity = permittedIdentity;
}
}
BsonClassMap.RegisterClassMap<FooAccessRestrictions>(cm =>
{
cm.MapProperty<List<IAccessPermission>>(c => (List<IAccessPermission>)c.AccessList);
});
AccessPermission类存在“找不到类型的序列化程序”问题。我已尝试在应用程序启动时向mongodb注册实体,如下所示:
BsonClassMap.RegisterClassMap<FooAccessRestrictions>();
BsonClassMap.RegisterClassMap<AccessPermission>();
BsonClassMap.RegisterClassMap();
BsonClassMap.RegisterClassMap();
我猜我一定是违反了mongodb的一些规则,我不知道。我希望我不需要为此创建自定义序列化程序。。。据我所知,我没有做任何以前没有做过的事情,除了文档嵌套了两层。它创建文档一点问题都没有,只是当我试图把它拿回来时,我遇到了问题
任何帮助都将不胜感激 好的,我现在已经解决了 在再次查看mongodb文档之后,我发现可以在注册类的同时注册类的属性 现在我的注册是这样的:
[BsonIgnoreExtraElements]
public class FooItem : IFooItem
{
[BsonId]
public ObjectId Id { get; set; }
public IFooAccessRestrictions AccessRestrictions { get; set; }
}
public class FooAccessRestrictions : IFooAccessRestrictions
{
[BsonId]
public ObjectId Id { get; set; }
public IAccessPermission[] AccessList { get; set; }
}
public class AccessPermission : IAccessPermission
{
[BsonId]
public ObjectId Id { get; set; }
public DateTimeOffset CreatedOn { get; set; }
public ObjectId CreatedBy { get; set; }
public AccessPermissionType Type { get; set; }
public string PermittedIdentity { get; set; }
public AccessPermission()
{
}
public AccessPermission(ObjectId createdBy, AccessPermissionType type, string permittedIdentity)
{
CreatedOn = DateTime.Now;
CreatedBy = createdBy;
Type = type;
PermittedIdentity = permittedIdentity;
}
}
BsonClassMap.RegisterClassMap<FooAccessRestrictions>(cm =>
{
cm.MapProperty<List<IAccessPermission>>(c => (List<IAccessPermission>)c.AccessList);
});
BsonClassMap.RegisterClassMap(cm=>
{
cm.MapProperty(c=>(List)c.AccessList);
});
(请注意,我的属性已从数组更改为列表,但这不会对我在这里讨论的问题产生任何影响)
MongoDB现在能够对这些对象进行反序列化和序列化。没有其他与此相关的响应,因此已将其标记为正确