2011-12-03 52 views
1

試圖從集合中獲取文檔,並且文檔包含嵌套文檔。試圖獲取包含嵌套文檔的文檔

獲得一個錯誤信息「預期表示Project.Models.MapTags值的序列化形式的嵌套文件,但發現字符串的值而不是」

這裏是代碼

這是獲取集合並執行查詢的方法。

public List<Maps> GetAllMapsByUserId(ObjectId userId)   
        {    
         using (_server.RequestStart(_db))    
         {     
          var query = Query.EQ("UserId", userId); 
          MongoCursor<Maps> maps = _db.GetCollection<Maps>"Maps").FindAs<Maps>(query); 
          var list = maps.ToList(); 

          return list;    
         } 
        } 

這是一個包含對象

namespace Project.Models 
{  

public class Maps {   

    [BsonId]   
    public ObjectId Id { get; set; } 
    public ObjectId UserId { get; set; } 
    public string MapName { get; set; } 
    public string Description { get; set; } 
    public BsonBoolean PublicMap { get; set; } 
    public DateTime Created { get; set; } 

    [BsonIgnoreIfNull] 
    public List<MapTags> Tags { get; set; } 

    [BsonIgnoreIfNull] 
    public List<MapVotes> Votes { get; set; } 

    } 

public class MapVotes 
{ 
    public ObjectId VoterId { get; set; } 
    public int VoteValue { get; set; } 
} 

public class MapTags 
{ 
    public string Tag { get; set; } 
} 

} 

希望有人有很長一段時間的想法/提示或類似的,一直在尋找和測試,並沒有發現一個解決方案的類。

更新:

下面是數據在數據庫

{ 
    "_id" : ObjectId("4eda2415851e702684bf6392"), 
    "MapName" : "Test", 
    "Description" : "Test", 
    "Created" : ISODate("2011-12-03T13:28:53.698Z"), 
    "PublicMap" : false, 
    "UserId" : ObjectId("4e8033a0851e701c7c1e12e1"), 
    "Tags" : [ "Test", "Kalle", "Jonas", "Fredrik" ] 
    } 

回答

1

它看起來像串行期望一個文件的例子,但發現一個字符串。

的問題是,你已經連載字符串數組:

{ 
    "MapName" : "SomeMapName" 
    "Tags" : ["tag1", "tag2"] // list of strings 
    // ... 
} 

但你應該有

{ 
    "MapName" : "SomeMapName" 
    "Tags" : [ { /* map tag document */ }, { /* map tag document */ }, ...] 
    // ... 
} 

解串器希望找到一個文檔,但僅找到字符串。現在有可能MapTag類基本上可以使用字符串進行序列化,並且可以從字符串重建,但是您必須爲provide a custom serializer。這非常簡單。

+0

新增了數據在數據庫中的外觀示例,刪除了所有舊數據並重新創建了新數據。 – Forser

+0

證實了這一假設。相應地更新答案 – mnemosyn