gpt4 book ai didi

c# - .NET Core - 读取 JSON 文件的转换日期

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:53 24 4
gpt4 key购买 nike

有什么方法可以转换从 JSON 文件读取的日期吗?我的文件中的示例记录是:

{
"UserID": 73274,
"Created": "17-03-2018 06:35",
"Office": "Washington"
},

我正在做的是导入 JSON 文件并将其内容保存到数据库中。问题是,当日期为 DD-MM-YYYY hh:ss 格式时,它根本不起作用。但是当日期是 YYYY-MM-DDThh:mm:ss 格式时,一切都很好。如何在读取此文件后将日期解析为另一种格式,并对具有解析日期的文件执行以下操作?

负责此操作的部分 Controller 是:

if (file.ContentType == "application/json")
{
try
{
using (var reader = new StreamReader(file.OpenReadStream()))
{
content = reader.ReadToEnd();
}
}
catch
{
return BadRequest(Messages.fileNotChosen);
}
try
{
userObjects = JsonConvert.DeserializeObject<List<UserImportModel>>(content);
}
catch
{
return BadRequest();
}
}

当日期格式为 YYYY-MM-DDThh:mm:ss 时,将正确计算 userObjects 并且 Controller 移动到我执行添加到数据库的部分。当日期格式为 DD-MM-YYYY hh:ss 时,userObjects = 0 并且 Controller 移动到 catch,然后返回 BadRequest()。

编辑:UserImportModel 类的代码:

public class UserImportModel
{

public string UserID { get; set; }

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime Created { get; set; }

public string Office { get; set; }

}

最佳答案

如果你需要反序列化不同格式的日期,你必须创建一个自定义的JsonConverter:

public class MultiFormatDateTimeConverter : JsonConverter
{
private List<string> formats;

public MultiFormatDateTimeConverter(List<string> formats)
{
this.formats = formats;
}

public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string dateString = (string)reader.Value;

foreach (string format in formats)
{
if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
return date;
}
}
throw new JsonException("Unable to parse \"" + dateString + "\" as a date.");
}

public override bool CanWrite
{
get { return false; }
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}

使用示例:

var settings = new JsonSerializerSettings();
settings.DateParseHandling = DateParseHandling.None;
settings.Converters.Add(new MultiFormatDateTimeConverter(new List<string> { "DD-MM-YYYY hh:ss", "YYYY-MM-DDThh:mm:ss" }));

userObjects = JsonConvert.DeserializeObject<List<UserImportModel>>(content, settings);

关于c# - .NET Core - 读取 JSON 文件的转换日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com