驱动程序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);
}
}
}