我遇到的情况是,在两个不同的程序集中,我具有相同的类型名称。 将其存储在MongoDb中时,它将对象类型的名称存储在“ _t”值中...
问题是,当尝试解决它时,它不会每次都使用好类型。因此,我首先想到的是将AssemblyQualifiedName
存储在_t中,所以我创建了这个BsonSerializer:
内部类TypeSerializer:SerializerBase { #region覆盖方法
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Type value)
{
var typeAsString = value?.AssemblyQualifiedName;
if (!string.IsNullOrWhiteSpace(typeAsString))
{
context.Writer.WriteString(typeAsString);
}
else
{
context.Writer.WriteString(string.Empty);
}
}
public override Type Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var typeAsString = context.Reader.ReadString();
if (!string.IsNullOrWhiteSpace(typeAsString))
{
return Type.GetType(typeAsString);
}
return null;
}
#endregion
它对类型成员非常有用,但对文档类型却不起作用。如何强制C#驱动程序将此转换器用于“ _t”字段?