Bson不使用'new'覆盖的属性进行序列化,并报告重复使用属性名

时间:2019-03-08 19:42:13

标签: c# mongodb bson

我们要使用具有公共变量和本地变量的模型。我们希望将其保存在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'关键字,但是如何解决呢?

0 个答案:

没有答案