MongoDB c# 反序列化 - 属性 无法识别

MongoDB c# Deserialization - property not recognized

我正在从到处使用 BsonDocument 升级到在 POCO 对象上使用反序列化。

总体而言,对象填充了正确的值,但我对下面的代码有疑问,EventReferenceEntry.Id 属性 上的值始终为 0。

也许值得知道的是,如果我从 EventReferenceEntry class 中删除“BsonIgnoreExtraElements”属性,我会收到错误消息“元素 'i' 不匹配任何字段或 属性 class“

我也尝试过将 EventReferenceEntry.Id 设置为 Int64 和 UInt64,但没有区别。

驱动是2.7.3版本的,我用最新版的全新安装试了一下,还是一样的问题。

数据库是一系列事件。一个事件有: _id = Int64 _t = Int32(事件类型) _r = 对象数组(对相关的其他对象、实体或事件的引用。)

POCO 对象的 C# 代码

    [BsonIgnoreExtraElements]
    public class EventEntry
    {
        [BsonElement("_id")]
        public ulong Id { get; set; }

        [BsonElement("_t")]
        public int Type { get; set; }

        public DateTime Time { get { return new DateTime((long)Id, DateTimeKind.Utc); } }

        [BsonElement("_r")]
        public List<EventReferenceEntry> References { get; set; }

    }

    [BsonIgnoreExtraElements]
    public class EventReferenceEntry
    {
        [BsonElement("i")]
        public UInt64 Id { get; set; }

        [BsonElement("n")]
        public string Name { get; set; }

        [BsonElement("a")]
        public int Asset { get; set; }

        public EventReferenceEntry()
        {
        }
    }

示例数据库条目

{
"_id" : NumberLong(637684658186492532),
"_t" : 1058,
"_r" : [ 
    {
        "n" : "p",
        "i" : NumberLong(637662370697662760)
    }, 
    {
        "n" : "a",
        "a" : 1202
    }, 
    {
        "n" : "o",
        "i" : NumberLong(637684655676255124),
        "a" : 2934
    }
]
}

找到问题和解决方法。

class 中的 属性(在我的例子中是 EventReferenceEntry)不能命名为“Id”或“id”,我猜一个 属性 被假定为绑定到 _id bson 属性。但是,它可以命名为“ID”或“Ident”或任何其他名称,并且会分配值。