从MongoDB获取数据时出现此错误消息。格式为yyyy-MM-dd HH:mm:ss
。An 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
的配置。