尝试从集合中获取文档,文档包含嵌套文档。
收到错误消息“预期表示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;
}
}
这是包含对象的类
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" ]
}
答案 0 :(得分:1)
看起来序列化程序需要一个文档,但会找到一个字符串。
问题是您已经序列化了一个字符串数组:
{
"MapName" : "SomeMapName"
"Tags" : ["tag1", "tag2"] // list of strings
// ...
}
但你应该
{
"MapName" : "SomeMapName"
"Tags" : [ { /* map tag document */ }, { /* map tag document */ }, ...]
// ...
}
反序列化程序希望找到一个文档,但只找到一个字符串。现在有可能MapTag
类基本上可以使用字符串序列化,并且可以从字符串重构,但是你必须provide a custom serializer。这很简单。