Mongo C# 驱动程序自定义泛型类型的序列化
本文关键字:序列化 泛型类型 自定义 驱动程序 Mongo | 更新日期: 2023-09-27 17:56:23
我对mongo c#驱动程序有一些问题。我有这样的课程:
class MongoEntity<T>
{
public ObjectId Id {get; set;}
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public int Version { get; set; }
public T Entity { get; set; }
}
在将我的实体序列化为数据库期间,我有这样的文档:
"_id" : "510654cf33d22e1774d5a2a9",
"CreatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"UpdatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"Version" : 1,
"Entity" : {
"EntityKey" : "tom@gmail.com",
"Password" : "ICy5YqxZB1uWSwcVLSNLcA==",
"Email" : "tom@gmail.com",
"Name" : "Tom Anderson"
}
我真正想要的是将文档中实体对象的所有属性与MongoEntity对象的属性处于同一级别,如下所示:
"_id" : "510654cf33d22e1774d5a2a9",
"CreatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"UpdatedAt" : {
"DateTime" : ISODate("2013-01-28T10:37:02.932Z"),
"Ticks" : NumberLong("634949662229321756")
},
"Version" : 1,
"EntityKey" : "tom@gmail.com",
"Password" : "ICy5YqxZB1uWSwcVLSNLcA==",
"Email" : "tom@gmail.com",
"Name" : "Tom Anderson"
没有实体嵌入对象。我怎样才能以最简单的方式实现这一点?
附言我真正想要的是驱动程序的一些配置或编写自定义序列化程序,也许是动态的一些解决方法,我不想更改当前的类结构 Enteties <-> MongoEntity
谢谢你的帮助。
无法配置内置序列化程序以生成所需的文档格式(其中实体字段向上提升一级)。
您必须编写一个自定义序列化程序,但这很困难,因为您必须为每个
WiredPrairie的建议(人:MongoEntityBase)是推荐的解决方案。
只需使用包含所有必需数据库字段的基本类型的子类。
public class abstract MongoEntityBase
{
public ObjectId Id {get; set;}
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public int Version { get; set; }
}
然后,使用它:
public class Person : MongoEntityBase
{
public string Email { get; set; }
public string Name { get; set; }
}
10gen提供的MongoDB C#驱动程序可以很好地处理这种模式。