2013-02-01 15 views
2

通常,当我将对象存储到我的集合中并向对象中添加一个新属性时,mongodb C#驱动程序将在未找到属性时使用默认值MongoDB的。但是,当我有一个嵌套的类时,官方的MongoDB C#驱动程序似乎没有以相同的方式处理它。见示例代码:当使用C#驱动程序反序列化嵌套类时,MongoDB中的错误

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不存在。

有没有人知道我可以如何使反序列化器也以同样的方式反序列化嵌套类?

回答

0

C#的驱动程序反序列化,如果自动嵌套类,您传递特定类型找到一个亲切与蒙戈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 
       } 
     ] 
} 
+0

OK,现在尝试添加一个新的属性到你的Node类,就像一个新的字符串属性。当我这样做时,会引发反序列化错误。 – user2031022

相关问题