.Net MongoDB,查找自定义文档 class
.Net MongoDB, Finding documents of custom class
这是集合中的示例数据。基本上我想做的唯一一件事就是以 "Student" 的形式读取所有这样的数据,但由于某种原因它会抛出错误。当我将它们全部作为 Bson 文档阅读时效果很好,但这不是我想要做的。这是错误:
'System.AggregateException' 类型的未处理异常发生在 mscorlib.dll
附加信息:出现一个或多个错误。
我做错了什么?
{
“_id”:137,
"name" : "Tamika Schildgen",
"scores":[
{
"type" : "exam",
"score":4.433956226109692
},
{
"type" : "quiz",
"score":65.50313785402548
},
{
"type" : "homework",
"score":89.5950384993947
}
]
}
static async Task MainAsync(string[] args)
{
var client = new MongoClient();
var db = client.GetDatabase("school");
var col = db.GetCollection<Student>("students");
var list = await col.Find(new BsonDocument())
.ToListAsync();
foreach(var doc in list)
{
Console.WriteLine(doc);
}
}
}
class Student
{
public ObjectId Id { get; set; }
public string name { get; set; }
public Scores[] scores { get; set; }
}
class Scores
{
public string type { get; set; }
public double score { get; set; }
}
错误在于Id字段类型:
如果您打开抛出 CLR 异常时中断执行的选项(菜单调试|异常),您将看到类似于以下内容的消息:"An error occurred while deserializing the Id property of class ConsoleApplication2.Student: Cannot deserialize a 'ObjectId' from BsonType 'Double'."
如果您将 class 学生更改为:
public class Student
{
public int Id { get; set; }
public string name { get; set; }
public Scores[] scores { get; set; }
}
不会再抛出异常
(此外,为了获得可读的结果,您可能应该重写 Student class 的 ToString() 方法)。
这是集合中的示例数据。基本上我想做的唯一一件事就是以 "Student" 的形式读取所有这样的数据,但由于某种原因它会抛出错误。当我将它们全部作为 Bson 文档阅读时效果很好,但这不是我想要做的。这是错误:
'System.AggregateException' 类型的未处理异常发生在 mscorlib.dll
附加信息:出现一个或多个错误。
我做错了什么?
{ “_id”:137, "name" : "Tamika Schildgen", "scores":[ { "type" : "exam", "score":4.433956226109692 }, { "type" : "quiz", "score":65.50313785402548 }, { "type" : "homework", "score":89.5950384993947 } ] }
static async Task MainAsync(string[] args)
{
var client = new MongoClient();
var db = client.GetDatabase("school");
var col = db.GetCollection<Student>("students");
var list = await col.Find(new BsonDocument())
.ToListAsync();
foreach(var doc in list)
{
Console.WriteLine(doc);
}
}
}
class Student
{
public ObjectId Id { get; set; }
public string name { get; set; }
public Scores[] scores { get; set; }
}
class Scores
{
public string type { get; set; }
public double score { get; set; }
}
错误在于Id字段类型:
如果您打开抛出 CLR 异常时中断执行的选项(菜单调试|异常),您将看到类似于以下内容的消息:"An error occurred while deserializing the Id property of class ConsoleApplication2.Student: Cannot deserialize a 'ObjectId' from BsonType 'Double'."
如果您将 class 学生更改为:
public class Student
{
public int Id { get; set; }
public string name { get; set; }
public Scores[] scores { get; set; }
}
不会再抛出异常
(此外,为了获得可读的结果,您可能应该重写 Student class 的 ToString() 方法)。