c# - MongoDB C# 驱动程序 (2.7) 和序列化问题
问题描述
我目前对最新的 mongodb c# 驱动程序(2.7)、继承和序列化有一个奇怪的问题。
这是我正在使用的超级简化的类层次结构:
public abstract class BaseClass
{
public Guid Id { get; private set; }
protected BaseClass(Guid id)
{
Id = id;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass(Guid id) : base(id) {}
}
当我尝试为 mongo 序列化注册类时,出现错误:
var type = typeof(DerivedClass);
if (BsonClassMap.IsClassMapRegistered(type))
return;
var cm = new BsonClassMap(type);
cm.AutoMap();
BsonClassMap.RegisterClassMap(cm);
错误是:
The memberInfo argument must be for class DerivedClass, but was for class BaseClass.
Parameter name: memberInfo
现在,这就是事情开始变得奇怪的地方,当我试图了解发生了什么时,我对 BaseClass 或 DerivedClass 进行了一些更改。
下面列出的两个更改中的任何一个都将使该RegisterClassMap
方法正常工作...
更改 1:在 BaseClass 上添加第二个未使用的属性
public abstract class BaseClass
{
public Guid Id { get; private set; }
public string Test { get; }
protected BaseClass(Guid id)
{
Id = id;
}
}
更改 2:将 Id 属性更改为具有非私有设置器(任何其他作品)
public abstract class BaseClass
{
public Guid Id { get; protected set; }
protected BaseClass(Guid id)
{
Id = id;
}
}
我的问题是……发生了什么?虽然我可能同意对于序列化程序,您应该为要映射的类(在本例中为 DerivedClass)上的每个属性提供一个可访问的设置器,但为什么案例 #1 实际上没有给出任何错误?
解决方案
推荐阅读
- python - 迭代时如何处理python中列表中的2个元素(包括删除)
- javascript - SAPUI5表单动态添加标签和输入并为输入设置ID但不起作用
- angular - Angular2 - 根据其他模型值显示和隐藏标签?
- python - 在熊猫数据框中获取 IndexError
- react-native - 在 Windows 10 上安装 expo-cli 后,运行 `expo start` 失败并出现 ENOENT 错误
- java - 从 URL 线程解析 JavaFX JSON 冻结 UI
- r - ggplot密度函数不正确(来自Stata的正常百分比)
- laravel - Laravel 列表编辑
- excel - 在excel中区分零,空白和数字
- python - 正则表达式不匹配