.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() 方法)。