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”或任何其他名称,并且会分配值。
我正在从到处使用 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”或任何其他名称,并且会分配值。