MongoDB C#驱动程序通用类型

MongoDB C#驱动程序通用类型,c#,mongodb,generics,C#,Mongodb,Generics,我正在尝试向mongodb添加通用对象 我怎么能让这样的东西起作用 如果我必须实现自己的序列化程序,请您给我一些提示,我从哪里开始 public class ParameterBase{} [BsonDiscriminator(RootClass = true, Required = true)] [BsonKnownTypes(typeof(NumericParameter))] public class Parameter<T> : ParameterBase { [B

我正在尝试向mongodb添加通用对象

我怎么能让这样的东西起作用

如果我必须实现自己的序列化程序,请您给我一些提示,我从哪里开始

public class  ParameterBase{}
[BsonDiscriminator(RootClass = true, Required = true)]
[BsonKnownTypes(typeof(NumericParameter))]
public class Parameter<T> : ParameterBase
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public ObjectId Id { get; set; }
    public string Name{get;set;}

    public virtual Type Type { get{return typeof(T); } }      
    public virtual T Value
    {
        get { return _value; }
        set
        {
            if (EqualityComparer<T>.Default.Equals(_value, value) == false)
            {
                _value = value;
            }
        }
    }
    protected T _value;       
}

public class NumericParameter : Parameter<double>
{
    private double _value;
    public double Value{get{return _value;}set{_value = value;}}
}

public class StringParameter : Parameter<string>
{
    private string _value;
    public string Value{get{return _value;}set{_value = value;}}
}
如果我将类StringParameter添加到类的BsonKnownTypes中 参数 这样地 [BsonKnownTypes(typeof(NumericParameter)、typeof(StringParameter))]

我得到这个错误

System.ArgumentNullException:'Class Ha.MongoDb.Playway.StringParameter无法分配给Class Ha.MongoDb.Playway.Parameter'1[[System.Double,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]。确保已知类型是从映射类派生的。 参数名称:类型'


您能解释一下当前代码的问题是什么吗?这始终是一个很好的起点…很抱歉,我添加了更多信息,希望您能提供帮助。您需要鉴别器和已知类型吗?
var context = new DatabaseContext("test");
        var collection = context.db.GetCollection<ParameterBase>("RecipeParameterSet");
        var nParameter = new NumericParameter()
        {
            Name = "Offset",
            Value = 1.8
        };
        collection.InsertOne(nParameter);
        Console.ReadLine();