Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mongodb—实体序列化OK,但给出';未找到类型为';反序列化时出错_C#_Mongodb_Serialization_Deserialization - Fatal编程技术网

C# Mongodb—实体序列化OK,但给出';未找到类型为';反序列化时出错

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

我使用mongodb的c#驱动程序(v1.5)解决了这个问题

我在序列化对象时也遇到过类似的问题,但过去一直能够通过在应用程序启动期间向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);
        });
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现在能够对这些对象进行反序列化和序列化。

没有其他与此相关的响应,因此已将其标记为正确