MongoDB C# DateTimeOffset serialization

本文关键字:serialization DateTimeOffset MongoDB | 更新日期: 2023-09-27 18:14:19

我正在使用标准序列化提供程序在mongodb中存储DateTimeOffset

在数据库中是这样的:

{
    "_id" : LUUID("1197f7cf-cb83-4047-85f8-6e9f8c8ad24f"),
    "CreatedDateTimeUtc" : [ 
        6.3612613922066e+017.0, 
        0
    ]
}

但是当我尝试在c#中反序列化时,抛出了以下异常:

系统。FormatException:在反序列化类Turnout.Common.Model.Turnout: ReadInt64的CreatedDateTimeUtc属性时发生错误,只能在CurrentBsonType为Int64时调用,而不能在CurrentBsonType为Double时调用。

有什么好主意吗?

MongoDB C# DateTimeOffset serialization

如果您仍然遇到此问题,请编写您自己的序列化器。请查看DateTimeOffsetSerializer mongodb . bson . serialize . serializer了解实现细节。我实际上使用它而不是默认值,因为它包含一个可读的DateTime。这样注册:

new BsonStaticsWrapper().RegisterSerializer(typeof(DateTimeOffset), new DateTimeOffsetSerializer(BsonType.Document));
我知道这不是你问题的确切答案,但它可能会帮助你得到它。它可能会帮助其他人找到解决方法。

在现代,MongoDB使这更容易

BsonSerializer.RegisterSerializer(typeof(DateTimeOffset), new DateTimeOffsetSerializer(BsonType.DateTime));

之后,你的数据库实体将有DateTimeOffset序列化如下:

CreatedAt: 2012-01-26T12:15:55.000+00:00