上下文
行JsonConvert.SerializeObject(DateTime.Now)
给出以下结果:
“2018-05-25T07:59:27.2175427 + 02:00”
但是当我尝试使用以下行代码将此JSON字符串反序列化为DateTime时:JsonConvert.DeserializeObject<DateTime>("2018-05-25T07:59:27.2175427+02:00")
它为Newtonsoft.Json.JsonReaderException
提供以下消息:
解析值时遇到意外的字符:2。路径'',第1行,第1位。
到目前为止我还尝试了什么
“2018-05-25T07:59:27”
导致同样的异常
问题
使用JSON序列化格式的日期时间字符串,我希望有一个DateTime
变量和正确的值。我怎样才能完成这项任务?
答案 0 :(得分:3)
如JSON standard所示,必须引用JSON字符串文字:
string
是零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义。字符表示为单个字符串。字符串非常类似于C或Java字符串。
因此,要成为有效的JSON,您的c#字符串文字必须包含周围的双引号,如下所示:
var dateTime = JsonConvert.DeserializeObject<DateTime>("\"2018-05-25T07:59:27.2175427+02:00\"");
很容易混淆最外层的引号,这些引号是c#语言的一部分,并在c#代码中分隔字符串,但不包含在字符串本身中,内部引号是字符串文字本身的一部分。 / p>
示例小提琴here。
答案 1 :(得分:2)
问题是JsonConvert.DeserializeObject
看起来好像需要JSON 对象而不是任何JSON 值。 (遗憾的是SerializeObject
并不总是产生一个对象,但是......)
您可以像这样解析它:
DateTime dt = new JValue("2018-05-25T07:59:27.2175427+02:00").ToObject<DateTime>();
或(等效?我不完全确定):
DateTime dt = (DateTime) new JValue("2018-05-25T07:59:27.2175427+02:00");
可能有更好的方法,但这至少有效。