C# 如何进行更新。设置日期时间序列化选项?
我正在使用mongoDB的官方10gen C#驱动程序。我有一些设置BSON映射的代码,它在应用程序启动时运行一次:C# 如何进行更新。设置日期时间序列化选项?,c#,mongodb,C#,Mongodb,我正在使用mongoDB的官方10gen C#驱动程序。我有一些设置BSON映射的代码,它在应用程序启动时运行一次: BsonClassMap.RegisterClassMap<Review>(cm => { cm.AutoMap(); cm.MapProperty(c => c.Date) .SetSerializationOptions(new DateTimeSerializationOptions{DateOnly = true})
BsonClassMap.RegisterClassMap<Review>(cm =>
{
cm.AutoMap();
cm.MapProperty(c => c.Date)
.SetSerializationOptions(new DateTimeSerializationOptions{DateOnly = true});
cm.UnmapProperty(c => c.Author);
});
这也适用于。。。但是它不支持Review类上DateTime的序列化设置,并且显然也保存了时间部分(即使是午夜,因为Review.Date==DateTime.Today
)。然后,当我尝试检索该文档时,我得到一个异常:[FileFormatException:TimeOfDay组件的DateOnly DateTime值不是零]
如何修复此问题?我认为序列化程序的工作方式是,它仅在序列化整个类时使用您的映射。您不是序列化
Review
类,而是序列化Review
类的Date
属性
也许您应该尝试注册DateTime
类的映射:
BsonClassMap.RegisterClassMap<DateTime>(...);
BsonClassMap.RegisterClassMap(…);
我不知道这是否有效,因为我还没有机会测试它,但是试一试。哇。这是一个艰难的过程。我得想一想如何最好地解决这个问题。Bryan的回答是正确的,序列化选项仅在序列化整个类时使用。但他最后一次建议在DateTime上调用RegisterClassMap是不对的 但我可以给你一个解决办法。出现异常的原因是,您使用的日期时间可能是本地时区的午夜,但它正在转换为UTC以存储在数据库中。这就是非零时间成分的来源 您可以使用以下命令禁止转换为UTC: .Set(“Reviews.Date.”DateTime.SpecifyKind(review.Date,DateTimeKind.Utc)) 这应该行得通,但如果不行,请告诉我,我会进一步调查
BsonClassMap.RegisterClassMap<DateTime>(...);