【问题标题】:.Net MongoDB, Finding documents of custom class.Net MongoDB,查找自定义类的文档
【发布时间】:2015-04-04 11:58:28
【问题描述】:

这是来自集合的示例数据。基本上,我唯一想做的就是以“学生”的身份读取所有这样的数据,但由于某种原因它会引发错误。当我将它们全部作为 Bson 文档阅读时效果很好,但这不是我想要做的。这是错误:

在 mscorlib.dll 中发生了“System.AggregateException”类型的未处理异常

附加信息:出现一个或多个错误。

我做错了什么?

{ “_id”:137, “名称”:“塔米卡·希尔德根”, “分数”:[ { “类型”:“考试”, “分数”:4.433956226109692 }, { “类型”:“测验”, “分数”:65.50313785402548 }, { “类型”:“家庭作业”, “分数”: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; }
}

【问题讨论】:

    标签: c# .net mongodb find


    【解决方案1】:

    错误在于Id字段类型:

    如果您在抛出 CLR 异常时打开中断执行选项(菜单调试|异常),您将看到类似以下的消息:“反序列化类 ConsoleApplication2.Student 的 Id 属性时发生错误:无法反序列化来自 BsonType 'Double' 的 'ObjectId'。"

    如果您将班级 Student 更改为:

              public class Student
              {
                public int Id { get; set; }
                public string name { get; set; }
                public Scores[] scores { get; set; }
              }
    

    不会再抛出异常了。

    (此外,为了获得可读的结果,您可能应该重写 Student 类的 ToString() 方法)。

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 2016-12-11
      • 2016-07-01
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多