2014-02-12 23 views
2

我有这样的枚举:蒙戈未能反序列化与枚举类

public enum EventType 
    { 
     Regular = 1, 
     Error = 2, 
     AccessDenied = 3, 
     Warning = 4, 
     Maintenance = 5, 
     CustomMade = 6 
    } 

我有下面的类:

[DataContract] 
    public class Event : IEvent 
    { 
     [DataMember(Name = "eventType", IsRequired = true)] 
     public EventType EventType { get; set; } 

     [DataMember(Name = "occuringDate", IsRequired = true)] 
     public DateTime OccuringDate { get; set; } 

     [DataMember(Name = "physicalServerId", IsRequired = true)] 
     public string PhysicalServerId { get; set; } 

     [DataMember(Name = "text", IsRequired = true)] 
     public string Text { get; set; } 

     [DataMember(Name = "systemIds", IsRequired = true)] 
     public ICollection<string> SystemIds { get; set; } 

     [DataMember(Name = "_id", IsRequired = true)] 
     public string Id { get; set; } 
    } 

当我将其插入到我的蒙戈集合,我得到以下对象(在蒙戈):

{ "_id" : "1", "eventType" : 1, "occuringDate" : "2014-02-12T20:04:20.4328247+02 
:00", "physicalServerId" : "10", "text" : "User has logged in successfully.", "s 
ystemIds" : [ "1", "3" ], "details" : "userId: 2" } 

现在,当我尝试读取对象是这样的:

MongoClient mongoClient = new MongoClient(connectionString); 
MongoServer mongoServer = mongoClient.GetServer(); 
this.db = mongoServer.GetDatabase("eventsLog"); 
eventsCollection = this.db.GetCollection<Event>("eventsLog"); 
eventsCollection.Exists(); 
this.eventsCollection.FindAll().SetSkip((int)(page * perPage)).SetLimit((int)perPage).ToList(); 

我得到一个异常:Element 'eventType' does not match any field or property of class LogAggregation.PublicLibrary.Models.Event.

我在做什么错?使用BsonAttributes控制系列化

+0

你添加的事实后场?有些文件是否包含它们,有些则不是?如果是这种情况,你需要告诉BSON序列化器,一些元素可能不存在,那没关系。将[BsonIgnoreExtraElements]添加到您的班级。 – Matt

+0

@Matt不,所有的元素在那里,当这是写入mongo –

+0

你看过[BsonElement(“eventType”)]属性?我以前从未使用过Mongo和DataContract。 – Matt

回答

3

尝试/反序列化覆盖

[BsonElement("eventType")] 

而不是

[DataMember(Name = "eventType", IsRequired = true)]