gpt4 book ai didi

c# - 将所有日期存储为 BsonDocuments

转载 作者:行者123 更新时间:2023-11-30 20:49:00 27 4
gpt4 key购买 nike

我觉得这是可能的,但我似乎找不到。我想配置我的 mongo 驱动程序以将任何 DateTime 对象存储为 BsonDocument。

mongo c# 驱动程序允许您在全局范围内设置某些约定,这样您就不需要注释所有内容,这是否也适用于日期时间选项?

例如,我想删除以下注释:

[BsonDateTimeOptions(Representation = BsonType.Document)]

来 self 所有的 DateTime 属性。谁能指出我正确的方向?

最佳答案

当我试图验证 devshorts 提供的答案是否有效时,我遇到了一个编译时错误(因为集合初始化语法调用的 ConventionPack 的 Add 方法需要一个 IConvention)。

建议的解决方案几乎是正确的,只需要稍作修改:

ConventionRegistry.Register(
"dates as documents",
new ConventionPack
{
new DelegateMemberMapConvention("dates as documents", memberMap =>
{
if (memberMap .MemberType == typeof(DateTime))
{
memberMap .SetSerializationOptions(new DateTimeSerializationOptions(DateTimeKind.Utc, BsonType.Document));
}
}),
},
t => true);

如果我们需要在多个地方使用这个约定,我们可以将它打包到一个类中,如下所示:

public class DateTimeSerializationOptionsConvention : ConventionBase, IMemberMapConvention
{
private readonly DateTimeKind _kind;
private readonly BsonType _representation;

public DateTimeSerializationOptionsConvention(DateTimeKind kind, BsonType representation)
{
_kind = kind;
_representation = representation;
}

public void Apply(BsonMemberMap memberMap)
{
if (memberMap.MemberType == typeof(DateTime))
{
memberMap.SetSerializationOptions(new DateTimeSerializationOptions(_kind, _representation));
}
}
}

然后像这样使用它:

ConventionRegistry.Register(
"dates as documents",
new ConventionPack
{
new DateTimeSerializationOptionsConvention(DateTimeKind.Utc, BsonType.Document)
},
t => true);

关于c# - 将所有日期存储为 BsonDocuments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com