Попытка получить документы, которые содержат вложенные документы - PullRequest
1 голос
/ 03 декабря 2011

Попытка извлечь документы из коллекции, и документы содержат вложенные документы.

Получение сообщения об ошибке, в котором говорится "Ожидается вложенный документ, представляющий сериализованную форму значения Project.Models.MapTags, но найдензначение String вместо "

Вот код

Это метод, который получает коллекцию и выполняет запрос.

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;            
                      }
                  }

Это класс, который содержитobject

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 Ответ

1 голос
/ 03 декабря 2011

Похоже, что сериализатор ожидает документ, но находит строку.

Проблема в том, что вы сериализовали массив строк:

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

, но вы должны иметь

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

Десериализатор ожидает найти документ, но находиттолько строка.Теперь возможно, что класс MapTag может быть по существу сериализован с использованием строки и может быть восстановлен из строки, но вы должны предоставить для этого собственный сериализатор .Это довольно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...