MongoDB C# .NetCore 驱动程序 序列化忽略属性
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
问题描述1
正在使用官方 MongoDB C# Drive v0.9.1.26831,但我想知道给定一个 POCO 类,是否有办法忽略插入的某些属性。
例如,我有以下课程:
public class GroceryList
{
public string Name { get; set; }
public FacebookList Owner { get; set; }
public bool IsOwner { get; set; }
}
有没有办法在插入 GroceryList 对象时不插入IsOwner?基本上,我从数据库中获取对象,然后在应用层设置 IsOwner 属性,然后将其返回到控制器,然后将对象映射到视图模型。
希望我的问题有意义。谢谢!
解决方法1
看起来 [BsonIgnore] 属性完成了这项工作。
public class GroceryList : MongoEntity<ObjectId>
{
public FacebookList Owner { get; set; }
[BsonIgnore]
public bool IsOwner { get; set; }
}
问题描述2
正在使用官方 MongoDB 驱动程序 v0.9,并尝试读取一个集合。数据库中有一个字段我不想读入我的对象,但出现了以下错误。
“意想不到的元素:网络”
该集合在数据库中看起来像这样
Merchants
- _id
- Name
- Description
- Url
- Network
当我将它读入 C# 时,我想创建一个名为 Merchant 的对象,该对象具有除“Network”之外的所有相同属性。我该怎么做?
解决方法2
BSON 序列化器上有一个“IgnoreExtraElements”选项,您可以启用该选项来防止该错误。
将其设置为Merchant类的属性:
[BsonIgnoreExtraElements]
public Merchant {
// fields and properties
}
或者在代码中,如果您使用类映射:
BsonClassMap.RegisterClassMap<Merchant>(cm => {
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
.NETCore 项目中实际使用
BsonIgnoreExtraElements 是 MongoDB C# 驱动 提供的一种序列化约定,用于在反序列化时忽略BSON文档中未被实体类字段覆盖的额外元素,主要用于处理不同版本实体类与数据库字段不匹配的情况。
代码示例:
/// <summary>
/// mongo
/// </summary>
[BsonIgnoreExtraElements]
public class Ypjl
{
/// <summary>
/// 主键id
/// </summary>
public object _id { get; set; }
/// <summary>
///
/// </summary>
public string? YPSJ { get; set; }
/// <summary>
///
/// </summary>
public string? XM { get; set; }
/// <summary>
///
/// </summary>
public string? YPNR { get; set; }
/// <summary>
///
/// </summary>
public string? SFZH { get; set; }
/// <summary>
///
/// </summary>
public string? DocUrl { get; set; }
}
如图:
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。