尝试将 BsonDocument 反序列化为类时出现 System.FormatException

我对 mongoDB 完全陌生,我正在学习基础知识。我正在使用 mongoDB 和 Robo 3T 的 .NET 驱动程序(2.7.2)作为实用程序来手动管理数据库。我创建了一个TestDB数据库,在其中创建了myCollection许多这样的测试文档:


/* 1 */

{

    "_id" : ObjectId("5c124ee01c2477487574b212"),

    "x" : 1.0

}


/* 2 */

{

    "_id" : ObjectId("5c17d26369babb0c04610a33"),

    "count" : 1

}


/* 3 */

{

    "_id" : ObjectId("5c17d40f6002a11c44bc2c42"),

    "name" : "MongoDB",

    "type" : "Database",

    "count" : 1,

    "info" : {

        "x" : 203,

        "y" : 102

    }

}


/* 4 */

{

    "_id" : ObjectId("5c17dead9e83de138c71278a"),

    "counter" : 0

}


/* 5 */

{

    "_id" : ObjectId("5c17dead9e83de138c71278b"),

    "counter" : 1

}


/* 6 */

{

    "_id" : ObjectId("5c17dead9e83de138c71278c"),

    "counter" : 2

}


/* 7 */

{

    "_id" : ObjectId("5c17dead9e83de138c71278d"),

    "counter" : 3

}


/* 8 */

{

    "_id" : ObjectId("5c17dead9e83de138c71278e"),

    "counter" : 4

}


/* 9 */

{

    "_id" : ObjectId("5c17dead9e83de138c71278f"),

    "counter" : 5

}


/* 10 */

{

    "_id" : ObjectId("5c17dead9e83de138c712790"),

    "counter" : 6

}


/* 11 */

{

    "_id" : ObjectId("5c17dead9e83de138c712791"),

    "counter" : 7

}


/* 12 */

{

    "_id" : ObjectId("5c17dead9e83de138c712792"),

    "counter" : 8

}


/* 13 */

{

    "_id" : ObjectId("5c17dead9e83de138c712793"),

    "counter" : 9

}


/* 14 */

{

    "_id" : ObjectId("5c17dead9e83de138c712794"),

    "counter" : 10

}

等等......在我的控制台应用程序(在 Visual Studio 2017 社区)中,我创建了两个这样的类:


public class MyClass

{

    [BsonId]

    public ObjectId ID { get; set; }

    public string name { get; set; }

    public string type { get; set; }

    public int count { get; set; }

    public List<Info> info { get; set; }

}


public class Info

{

    public int x { get; set; }

    public int y { get; set; }

}

我想从数据库中获取一个文档,该文档/* 3 */在我的示例数据中标记为更复杂的数据。我尝试在 main 方法中获取数据的程序是这样的:


当我启动应用程序时,我收到此错误:System.FormatException:"An error occurred while deserializing the info property of class TEST_MongoDB_consoleApp.MyClass: Cannot deserialize a 'List<Info>' from BsonType 'Document'."


我究竟做错了什么 ?


在这种情况下,程序运行时没有任何异常,并且我从文档中获得了正确的 ObjectID 值。


再次 - 我做错了MyClass什么?


心有法竹
浏览 724回答 1
1回答

慕村9548890

这会有所帮助。在 Mongodb 中,对于集合中的每个条目,都需要有一个 objectid 后跟字段。需要更改您的信息类,例如:public class Info{&nbsp; &nbsp; [BsonId]&nbsp; &nbsp; public ObjectId Id {get; set; }&nbsp; &nbsp; public int x { get; set; }&nbsp; &nbsp; public int y { get; set; }}
打开App,查看更多内容
随时随地看视频慕课网APP