驱动程序1.9序列化的Mongodb C#参数数量有限吗?

驱动程序1.9序列化的Mongodb C#参数数量有限吗?,c#,mongodb,serialization,mongodb-.net-driver,C#,Mongodb,Serialization,Mongodb .net Driver,我在序列化过程中遇到问题。我已经花了很多时间,找不到解决办法。我有一个类,我想序列化为一个文档集合。如果我的类中有四个属性,那么一切都很好,但一旦我添加了另一个属性,我就会出现以下例外: 为Func类型声明指定的类型参数数量不正确。 这是我的密码: class Class1 { [BsonId] public ObjectId _id { get; set; } public string Modelname { get; set; }

我在序列化过程中遇到问题。我已经花了很多时间,找不到解决办法。我有一个类,我想序列化为一个文档集合。如果我的类中有四个属性,那么一切都很好,但一旦我添加了另一个属性,我就会出现以下例外:

为Func类型声明指定的类型参数数量不正确。

这是我的密码:

   class Class1
   {
      [BsonId]
      public ObjectId _id { get; set; }

      public string Modelname { get; set; }
      public string Sn { get; set; }
      public string Filename { get; set; }

      public byte[] DataBin { get; set; }
      [BsonIgnore]
      public MyCustomClass data { get; set; }

      [BsonConstructor]
      public Class1()
      { }

      public Class1(string Modelname, string Sn, string Filename, MyCustomClass data)
      {
         this.Modelname = Modelname;
         this.Sn = Sn;
         this.Filename = Filename;
         this.data = data;

         BinaryFormatter formatter = new BinaryFormatter();
         using(MemoryStream stream = new MemoryStream())
         {
            formatter.Serialize(stream, this.data);
            this.DataBin = stream.ToArray();
         }
      }

      [BsonConstructor]
      public Class1(string Modelname, string Sn, string Filename, byte[] dataBin)
      {
         this.Modelname = Modelname;
         this.Sn = Sn;
         this.Filename = Filename;
         this.DataBin = dataBin;

         BinaryFormatter formatter = new BinaryFormatter();
         using(MemoryStream stream = new MemoryStream(this.DataBin))
         {
            this.data = (MyCustomClass)formatter.Deserialize(stream);
         }
      }
   }
类Class1在我的集合中序列化得很好

     MongoClient client = new MongoClient();
     MongoServer server = client.GetServer();
     MongoDatabase database = server.GetDatabase("mydb");
     MongoCollection<Class1> collection = database.GetCollection<Class1>("testCollection");
     MyCustomClass data = new MyCustomClass();
     Class1 doc = new Class1("test", "sn", "filename", data);
     collection.Save<Class1>(doc);

好的,我找到问题了。我在同一台电脑上尝试了另一种解决方案,一切都很好。所以我把代码复制到我的实际解决方案中,但它不起作用:相同的代码,相同的计算机,但结果不同!最后,我意识到我的实际解决方案使用了.NET3.5。我把它改成了.NET4.0,它可以工作了


结论:官方的C#驱动程序据说是在.NET 3.5下构建的,但在.NET 4.0下工作得更好,因为.NET 3.5只定义了最多4个参数的Func委托。
   class Class1
   {
      [BsonId]
      public ObjectId _id { get; set; }

      public string Modelname { get; set; }
      public string Sn { get; set; }
      public string Filename { get; set; }

      public double Num { get; set; }

      public byte[] DataBin { get; set; }
      [BsonIgnore]
      public MyCustomClass data { get; set; }

      [BsonConstructor]
      public Class1()
      { }

      public Class1(string Modelname, string Sn, string Filename, double Num, MyCustomClass data)
      {
         this.Modelname = Modelname;
         this.Sn = Sn;
         this.Filename = Filename;
         this.Num = Num;
         this.data = data;

         BinaryFormatter formatter = new BinaryFormatter();
         using(MemoryStream stream = new MemoryStream())
         {
            formatter.Serialize(stream, this.data);
            this.DataBin = stream.ToArray();
         }
      }

      [BsonConstructor]
      public Class1(string Modelname, string Sn, string Filename, double Num, byte[] dataBin)
      {
         this.Modelname = Modelname;
         this.Sn = Sn;
         this.Filename = Filename;
         this.Num = Num;
         this.DataBin = dataBin;

         BinaryFormatter formatter = new BinaryFormatter();
         using(MemoryStream stream = new MemoryStream(this.DataBin))
         {
            this.data = (MyCustomClass)formatter.Deserialize(stream);
         }
      }
   }