客户端无法反序列化字符串日期时间



从MongoDB获取数据时出现此错误消息。格式为yyyy-MM-dd HH:mm:ssAn error occurred while deserializing the UploadTime property of class UserFile: String '2022-07-25 15:49:18' was not recognized as a valid DateTime.

public class UserFile
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[BsonElement("_id")]
public string? Id { get; set; }
[BsonElement("upload_time")]
[BsonDateTimeOptions(Kind = DateTimeKind.Unspecified, Representation = BsonType.String)]
public DateTime UploadTime { get; set; }
[BsonElement("data")]
public BsonDocument? Data{ get; set; }
}

如何正确反序列化日期时间字符串?插入时无法更改该值,因为该值来自另一个应用程序。

您可以创建一个自定义序列化程序来将string反序列化为DateTime。在最简单的形式中,如果您只想反序列化,下面的示例显示了一个读取值的自定义序列化程序:

public class CustomDateTimeSerializer : IBsonSerializer
{
public Type ValueType => typeof(DateTime);
public object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var str = context.Reader.ReadString();
return DateTime.ParseExact(str, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
throw new NotImplementedException();
}
}

您可以将属性配置为使用串行器,如下所示:

[BsonElement("upload_time")]
[BsonSerializer(typeof(CustomDateTimeSerializer))]
public DateTime UploadTime { get; set; }

请注意,在示例中,DateTimeOptions属性被删除,因为简单序列化程序不支持使用DateTimeOptions的配置。

最新更新