MongoDb C#驱动程序:如何覆盖“ _t”值

时间:2019-03-01 10:13:51

标签: c# mongodb

我遇到的情况是,在两个不同的程序集中,我具有相同的类型名称。 将其存储在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”字段?

0 个答案:

没有答案