Bson не сериализуется с «новыми» переопределенными атрибутами и сообщает о дублировании использования имени свойства - PullRequest
0 голосов
/ 08 марта 2019

Мы хотим использовать модель, которая имеет публичный вариант и локальный вариант. Мы хотим сохранить его в базе данных 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 правильно распознает переопределение Payment по ключевому слову «new».

Кто-нибудь знает решение? Помимо кодирования классов без наследования, что, вероятно, будет работать, но это плохая практика кодирования. Пожалуйста помоги! Похоже, что отражение внутри драйвера пропускает ключевое слово «new», но как обойти это?

...