【发布时间】:2016-08-18 00:48:14
【问题描述】:
有没有办法为从特定基类型继承的所有类型设置自定义序列化程序?
给定以下类型:
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 类型时,此序列化程序起作用。
我明白为什么会发生这种情况(PersonIdentity 与 StringIdentity 的类型不同)但是(不装饰 Person 类)我将如何在我的 @ 上获得类型为 PersonIdentity 的属性 Id 987654334@要使用这个序列化器序列化的类吗?
【问题讨论】:
-
不,我们不希望在 Jira 中出现这样的问题。不过,我会在这里回答。
标签: c# mongodb serialization mongodb-.net-driver bson