2011-12-03 4 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

関連する問題