gpt4 book ai didi

c# - 为所有继承自基类型的类设置自定义 MongoDB BsonSerializer

转载 作者:可可西里 更新时间:2023-11-01 10:21:50 25 4
gpt4 key购买 nike

有没有办法为从特定基类型继承的所有类型设置自定义序列化程序?

给定以下类型:

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()); 会将我在 Person 上的属性 Id 序列化为一个字符串。

当我将 Id 属性更改为 StringIdentity 类型时,此序列化程序起作用。

我明白为什么会这样(PersonIdentityStringIdentity 不是同一类型)但是(不装饰 Person 类)如何我在我的 Person 类上获得类型为 PersonIdentity 的属性 Id 以使用此序列化程序进行序列化?

最佳答案

所以,方法是注册一个 serialization provider .这将让您拦截所有解析身份的尝试,并用它们做任何您想做的事。

关于c# - 为所有继承自基类型的类设置自定义 MongoDB BsonSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38496901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com