【问题标题】:JsonConvert.DeserializeObject throws error while converting string to date [duplicate]JsonConvert.DeserializeObject 在将字符串转换为日期时抛出错误 [重复]
【发布时间】:2019-07-14 05:15:14
【问题描述】:

JsonConvert 在将字符串转换为 DateTime 时抛出错误。

我已设置日期格式化程序来解决此问题,但问题仍然存在。无法将字符串转换为 DateTime:14-07-2019。路径 'CartDetails[0].LineItems[0].QuoteDate',第 1 行,位置 371。

如果我设置格式化程序,我会得到“字符串未被识别为有效的日期时间。”

我的 JSON 字符串具有以下属性

我的对象具有以下属性

public DateTime QuoteDate { get; set; }
public DateTime LastUpdatedDate { get; set; }

"LastUpdatedDate": "01-01-0001"
"QuoteDate": "14-07-2019"

//var format = "dd-mm-yyyy'T'HH:mm:ssK";
//var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format};
//var myObj= JsonConvert.DeserializeObject<MyObject>(checkOutBody,dateTimeConverter);
var myObj= JsonConvert.DeserializeObject<MyObject>(checkOutBody);

我希望我的对象能够成功解析

【问题讨论】:

  • 那么年份不应该在日期格式字符串的结尾而不是开头,即"dd-mm-yyyy"
  • 另外,而不是IsoDateTimeConverter 使用JsonSerializerSettings.DateFormatString
  • 我已设置日期格式化程序来解决此问题 - 你在哪里做的?在您的代码示例中,您创建了此类格式化程序的实例,但从未将其设置在可能影响任何内容的位置
  • @SirRufo 我已经设置了它,并评论了它,因为它不起作用。我已经更新了我的问题。

标签: javascript c# json json.net


【解决方案1】:

您需要告诉JsonConvert.DeserializeObject 使用您提供的日期格式。

以下示例将传递到相同的日期

string varf = "{\"LastUpdatedDate\": \"01-01-0001\",\"QuoteDate\": \"07-14-2019\"}";
string varf2 = "{\"LastUpdatedDate\": \"01-01-0001\",\"QuoteDate\": \"14-07-2019\"}";


var myObj = JsonConvert.DeserializeObject<MyObject>(varf);
var obj = JsonConvert.DeserializeObject<MyObject>(varf2, new IsoDateTimeConverter { DateTimeFormat = "dd-MM-yyyy" });

在 myObj 的示例中,没有日期格式,因此它使用 MM-dd-yyyy 但示例 obj 使用显式日期格式

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
相关资源
最近更新 更多