2016-04-18 41 views
3

我有以下結構的數據庫:MongoDB的反序列化在C#中,當自定義ID字段

{ 
     "_id" : ObjectId(""), 
     "title" : "something", 
     "id" : 1, 
     (...) 
} 

Basicly我想從以下收集到我的類retrive數據:

[BsonIgnoreExtraElements] 
public class Topic 
{ 
    [BsonElement("id")] 
    public int Id { get; set; } 
    [BsonElement("title")] 
    public string Name { get; set; } 
} 

問題此代碼不起作用 - >執行錯誤消息: 無法從BsonType'ObjectId'反序列化'Int32', 但是這樣做:

[BsonIgnoreExtraElements] 
public class Topic 
{ 
    [BsonIgnore] 
    public int Id { get; set; } 
    [BsonElement("title")] 
    public string Name { get; set; } 
    [BsonElement("id")] 
    public int IdTest { get; set; } 

看起來像反序列化desperatly試圖匹配類屬性與名稱「ID」與數據庫中的ObjectId,這是不正確的,因爲我明確聲明,我想與BsonElement(「ID」)匹配而不是(「 _ID」)。

我很欣賞任何想法如何使它能夠正常工作。

回答

0

我落得這樣做:

public class Topic 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

[BsonIgnoreExtraElements] 
public class TopicMapper 
{ 
    [BsonElement("title")] 
    public string Name { get; set; } 
    [BsonElement("id")] 
    public int Identity { get; set; } 
} 

這:

var list = await col.Find(new BsonDocument()).ToListAsync().ConfigureAwait(false); 
     foreach(var doc in list) 
     { 
      if(doc.Name != null) 
       topics.Add(new Topic{ 
       Id = doc.Identity, 
       Name = doc.Name 
       }); 
     } 
1

你「_id」存儲在您的蒙戈文檔中的類型BsonType.ObjectId如此反序列化時,序列化嘗試找到名稱爲「Id」的屬性並使用ObjectId類型。在你的情況下,它發現了一致的姓名,但不正確的類型,是INT(INT32型類):我的建議是要改變

public int Id { get; set; } 

[BsonRepresentation(BsonType.ObjectId)] 
    public string Id { get; set; } 

或者

public ObjectId Id { get; set; } 

或者如果您使用MongoRepository,使您的類繼承自類實體:

 [BsonIgnoreExtraElements] 
    public class Topic : Entity 
    { 
     [BsonElement("title")] 
     public string Name { get; set; } 
    } 
相關問題