簡體   English   中英

使用C#驅動程序反序列化嵌套類時,MongoDB中出現錯誤

[英]Error in MongoDB when using C# driver to deserialize a nested class

通常,當我將對象存儲到集合中並向對象添加新屬性時,如果在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不存在。

有人知道我怎樣才能使反序列化器也以相同的方式反序列化嵌套類嗎?

如果您通過特定類型來查找一個使用mongo db的以下示例,則c#驅動程序會自動反序列化嵌套類

 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
                }
        ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM