Есть ли способ установить собственный сериализатор для всех типов, которые наследуются от определенного базового типа?Настройка настраиваемого MongoDB BsonSerializer для всех классов, которые наследуются от базового типа
Учитывая следующие типы:
class Identity<T> {
T Value { get; set; }
}
class StringIdentity : Identity<string> {
}
class PersonIdentity : StringIdentity {
}
С помощью следующей модели:
class Person {
public PersonId Identity { get; set; }
}
И следующее сериализатору:
class StringIdentitySerializer : IBsonSerializer<StringIdentity>
{
object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return Deserialize(context, args);
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, StringIdentity value)
{
context.Writer.WriteString(value.Value);
}
public StringIdentity Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return new StringIdentity(context.Reader.ReadString());
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
Serialize(context, args, value as StringIdentity);
}
public Type ValueType => typeof(StringIdentity);
}
я понял, что BsonSerializer.RegisterSerializer(typeof(StringIdentity), new StringIdentitySerializer());
бы сериализовать мою собственность Id
на Person
в качестве строка.
Этот сериализатор работает, когда я изменяю свойство Id
типа StringIdentity
.
Я понимаю, почему это происходит (PersonIdentity
не тот же типа StringIdentity
), но (без декорирования Person
класса), как бы я получить свойство Id
PersonIdentity
типа на моем Person
классе сериализацию с помощью этого сериалайзера?
[jira.mongodb.org] (https://jira.mongodb.org/secure/Dashboard.jspa) - пожалуйста, задайте там – profesor79
Нет, нам не нужны такие вопросы в Джире. Я отвечу здесь. –