gpt4 book ai didi

c# - 对象的MongoDB反序列化/反序列化

转载 作者:可可西里 更新时间:2023-11-01 10:31:29 25 4
gpt4 key购买 nike

我有以下类(class)。

public class User : System.Security.Principal.IPrincipal
{
public int _id { get; set; }

public IIdentity Identity { get; set; }

public bool IsInRole(string role) { }
}

我正在尝试使用以下代码将此类的实例保存到 MongoDB:

new MongoClient("")
.GetServer()
.GetDatabase("")
.GetCollection("")
.Save<User>(
new User
{
_id = 101,
Identity = new GenericIdentity("uName", "Custom")
}
);

保存后,当我从数据库中检索对象时; Identity.NameIdentity.AuthenticationType 的值仍为 null

这是因为缺少序列化/反序列化指令吗?

我已经尝试使用以下Class Map,但问题仍然存在。

BsonClassMap.RegisterClassMap<User>(cm =>
{
cm.AutoMap();
cm.MapIdProperty(c => c._id);
cm.MapProperty(c => c.Identity);
});

编辑

这是保存在数据库中的内容:

{
"_id" : 101,
"Identity" : {
"_t" : "GenericIdentity",
"Actor" : null,
"BootstrapContext" : null,
"Label" : null
}
}

最佳答案

问题是 GenericIdentity 不是数据类,并且有很多您不想保留的属性。在这种情况下,您将需要手动映射它。下面,我将映射仅有的两个真正重要的属性,即名称和身份验证类型。然后,我将告诉 MongoDB 驱动程序使用采用这两个参数的构造函数构造一个 GenericIdentity。

BsonClassMap.RegisterClassMap<GenericIdentity>(cm =>
{
cm.MapProperty(c => c.Name);
cm.MapProperty(c => c.AuthenticationType);
cm.MapCreator(i => new GenericIdentity(i.Name, i.AuthenticationType));
});

关于c# - 对象的MongoDB反序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630551/

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