我们要使用具有公共变量和本地变量的模型。我们希望将其保存在mongo数据库中,并希望能够以本地或公共版本读取(反序列化)它。在某个时间点需要什么。
为此,我们必须确保使用完全相同的属性名称保存它。为了简化此过程,我们通过扩展具有附加属性的公共模型来创建私有模型。如果我们使用newtonsoft json序列化器,则它的工作原理就像一个魅力。但是,对于Bson串行器,此操作不起作用。原因可能是属性定义中未识别关键字“ new”
namespace Public
{
[BsonIgnoreExtraElements]
class Job
{
public Payment Payment { get; set; }
}
[BsonIgnoreExtraElements]
class Payment
{
public long Reference { get; set; }
}
}
namespace Private
{
class Job : Public.Job
{
public new Payment Payment { get; set; }
public string PrivateData { get; set; }
}
class Payment : Public.Payment
{
public string PrivateData { get; set; }
}
}
// Calling code returns MongoDB.Bson.BsonSerializationException:
// 'The property 'Payment' of type 'Public.Job' cannot use element name
// 'Payment' because it is already being used by property 'Payment' of type
// 'Private.Job'.'
var test = job.ToBson();
如果我执行Json序列化,就没有问题,因为Json序列化器可以正确识别关键字'new'覆盖了Payment。
有人知道解决方案吗?除了对没有继承的类进行编码之外,这可能会起作用,但这是不好的编码习惯。请帮忙!看起来驱动程序内部的反射缺少'new'关键字,但是如何解决呢?