Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何进行更新。设置日期时间序列化选项?_C#_Mongodb - Fatal编程技术网

C# 如何进行更新。设置日期时间序列化选项?

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})

我正在使用mongoDB的官方10gen C#驱动程序。我有一些设置BSON映射的代码,它在应用程序启动时运行一次:

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>(...);