gpt4 book ai didi

c# - Mongodb - 实体序列化正常,但反序列化时出现 'No serializer found for type' 错误

转载 作者:可可西里 更新时间:2023-11-01 10:44:35 27 4
gpt4 key购买 nike

我在使用 mongodb (v1.5) 的 c# 驱动程序时遇到了这个问题

我在序列化对象时遇到过类似的问题,但过去总是能够通过在应用程序启动期间向 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;
}
}

它是 AccessPermission 类,它有“找不到类型的序列化程序”问题。我已经尝试在应用程序启动时按如下方式使用 mongodb 注册实体:

        BsonClassMap.RegisterClassMap<FooAccessRestrictions>();
BsonClassMap.RegisterClassMap<AccessPermission>();

我猜我一定是违反了一些我不知道的 mongodb 规则。我希望我不需要为此创建自定义序列化程序......据我所知,我没有做任何我以前没有做过的事情,除了文档嵌套了两层。创建文档完全没有问题,只是当我尝试将其取回时我遇到了问题。

任何帮助将不胜感激。

最佳答案

好的,我现在已经设法解决了这个问题。

又看了下mongodb的文档,发现在注册类的同时也可以注册类的属性。

所以现在我的注册看起来像这样:

        BsonClassMap.RegisterClassMap<FooAccessRestrictions>(cm =>
{
cm.MapProperty<List<IAccessPermission>>(c => (List<IAccessPermission>)c.AccessList);
});

(请注意,我的属性已从数组更改为列表,但这不会对我在这里谈论的问题产生任何影响)

MongoDB 现在能够对这些对象进行反序列化和序列化。

关于c# - Mongodb - 实体序列化正常,但反序列化时出现 'No serializer found for type' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com