c# - 使用 C# 驱动程序反序列化嵌套类时 MongoDB 出错

标签 c# mongodb exception deserialization mongodb-.net-driver

通常当我将一个对象存储到我的集合中并向我的对象添加一个新属性时,当在 MongoDB 中找不到该属性时,mongodb C# 驱动程序将使用默认值。然而,当我有一个嵌套类时,官方 MongoDB C# 驱动程序似乎并没有以同样的方式处理它。查看示例代码:

MongoCollection<Person> peopleCollection = fd.GetCollection<Person>("peopledb");
Person p = peopleCollection.FindOne(); //errors here w/ Type Cast Exception

当我向嵌套类添加新成员时发生:

class Address {
    string street;
    string zip;
    string state; //newly added member, causing deserialization errors/cast exceptions
}

class Person {
    ObjectId _id;
    string firstname;
    string lastname;
    Address personAddress;
}

在这种情况下,当我执行 FindOneAs 时,它会出错,因为 Person.personAddress.state 不存在。

有人知道如何让反序列化器也以相同的方式反序列化嵌套类吗?

最佳答案

如果您传递特定类型以找到一个,c# 驱动程序会自动反序列化嵌套类,请使用 mongo db 测试下面的示例

 public ActionResult Index()
        {
         //   MongoDatabase databse = MongoDatabase.Create("mongodb://localhost:27017/BeniSoftLabs");
            MongoDatabase mongodb = DBConn.DBConn.getDBConn();
            var menu = mongodb.GetCollection<Menu>("Menu").FindOne();


   }

 public class Node
    {
        public virtual string NodeTitle { get; set; }
        public virtual string Link { get; set; }
        public virtual string IconName { get; set; }
        public virtual string ClassName { get; set; }
        public virtual IList<Node> NodeList { get; set; }

    }

 public class Menu
    {
        public virtual ObjectId id { get; set; }
        public virtual IList<Node> MenuList { get; set; }
        public virtual IList<Node> RightMenuList { get; set; }
    }

数据模型是

{
        "_id" : ObjectId("50fecb7d60df893ad0e25138"),
        "MenuList" : [
                {
                        "NodeTitle" : "About Us",
                        "Link" : "/href.html",
                        "IconName" : "icon-home",
                        "ClassName" : "active",
                        "NodeList" : null
                },
                {
                        "NodeTitle" : "Our Solution",
                        "Link" : null,
                        "IconName" : "icon-briefcase",
                        "ClassName" : "dropdown",
                        "NodeList" : [
                                {
                                        "NodeTitle" : "HTML5 Apps",
                                        "Link" : "#/HTML5Apps",
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "CSS3 Apps",
                                        "Link" : "#/CSS3Apps",
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "Single Page Apps",
                                        "Link" : "#/SPAApps",
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "Smart Phone Apps",
                                        "Link" : "#/SMartPhoneApps",
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : ".Net Enterprise Apps",
                                        "Link" : "#/NETEnterprise",
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "Node.js Enterprise Apps",

                                        "Link" : "#/NodeEnterprise",
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                }
                        ]
                },
                {
                        "NodeTitle" : "Technologies",
                        "Link" : null,
                        "IconName" : "icon-briefcase",
                        "ClassName" : "dropdown",
                        "NodeList" : [
                                {
                                        "NodeTitle" : "HTML5 & CSS3",
                                        "Link" : null,
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "Angular.js",
                                        "Link" : null,
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "Node.js",
                                        "Link" : null,
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "Asp.net MVC",
                                        "Link" : null,
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "MongoDB",
                                        "Link" : null,
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                },
                                {
                                        "NodeTitle" : "My Sql",
                                        "Link" : null,
                                        "IconName" : null,
                                        "ClassName" : null,
                                        "NodeList" : null
                                }
                        ]
                },
                {
                        "NodeTitle" : "Why Us",
                        "Link" : null,
                        "IconName" : "icon-fire",
                        "ClassName" : null,
                        "NodeList" : null
                }
        ],
        "RightMenuList" : [
                {
                        "NodeTitle" : "Join Us",
                        "Link" : null,
                        "IconName" : "icon-eye-open",
                        "ClassName" : null,
                        "NodeList" : null
                },
                {
                        "NodeTitle" : "Contact Us",
                        "Link" : null,
                        "IconName" : "icon-user",
                        "ClassName" : null,
                        "NodeList" : null
                }
        ]
}

关于c# - 使用 C# 驱动程序反序列化嵌套类时 MongoDB 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14637905/

相关文章:

c# - TRY block 中的异常会中断它的执行吗?

c# - SSL API 请求截至今天失败 : "Could not create SSL/TLS secure channel"

c# - 当服务器返回 500 内部服务器错误时,有没有办法检索消息正文?

hibernate - JPA/Hibernate 异常处理

java.lang.VerifyError 函数调用的不兼容对象参数

c# 验证字符串是否包含匹配数量的括号

javascript - 无法修复 Mongoose 覆盖模型错误

node.js - 在 mongoose 中创建数据时无法读取未定义的属性 'push'

node.js - mongoJS 解析 JSON 输出

java - Junit4 @Parameterized.Parameters 和参数类型不匹配异常