Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#when自定义id字段中的MongoDB反序列化_C#_Mongodb_Poco - Fatal编程技术网

C#when自定义id字段中的MongoDB反序列化

C#when自定义id字段中的MongoDB反序列化,c#,mongodb,poco,C#,Mongodb,Poco,数据库中有以下结构: { "_id" : ObjectId(""), "title" : "something", "id" : 1, (...) } 基本上,我希望将以下集合中的数据检索到我的类: [BsonIgnoreExtraElements] public class Topic { [BsonElement("id")] public int Id { get; set; } [BsonElement("titl

数据库中有以下结构:

{
      "_id" : ObjectId(""),
      "title" : "something",
      "id" : 1,
      (...)
}
基本上,我希望将以下集合中的数据检索到我的类:

[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; }
似乎反序列化拼命尝试将名为“Id”的类属性与数据库中的ObjectId相匹配,这是不正确的,因为我明确声明要将其与bsoneElement(“Id”)相匹配,而不是(“\u Id”)

我很感激任何能让它按我需要的方式工作的想法。

我最后做了以下几点:

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
               });
        }
mongo文档中存储的“_id”的类型为BsonType.ObjectId,因此在反序列化时,序列化程序会尝试查找名为“id”且类型为ObjectId的属性。在您的例子中,它找到了匹配的名称,但不是正确的类型,即int(类中的int32类型):我的建议是更改

public int Id { get; set; }

或者,如果使用MongoRepository,则使您的类继承自类实体:

     [BsonIgnoreExtraElements]
     public class Topic : Entity
     {
       [BsonElement("title")]
       public string Name { get; set; }
     }
    public ObjectId Id { get; set; }
     [BsonIgnoreExtraElements]
     public class Topic : Entity
     {
       [BsonElement("title")]
       public string Name { get; set; }
     }