带有时间戳字符串的 Json.NET (Newtonsoft) 的解析器发生了什么?
What is going on with the parser of Json.NET (Newtonsoft) with timestamp strings?
static void Main(string[] args)
{
string someJsonString = "{\"time\": \"2021-02-24T13:15:43Z\"}";
JObject someJsonObject = JObject.Parse(someJsonString);
string time = someJsonObject.GetValue("time").Value<string>();
Console.WriteLine(time);
Console.ReadLine();
}
[使用 Newtonsoft.Json 版本 12.0.3]
为什么打印的结果是02/24/202113:15:43,而应该是2021-02-24T 13:15:43Z,我只需要字符串形式的值...这是怎么回事?
JSON.Net 会自动将日期格式的字符串解析为 DateTime
对象。如果你想防止这种情况,你要么需要使用具体的 class:
public class Foo
{
public string Time { get; set; }
}
像这样反序列化:
var f = JsonConvert.DeserializeObject<Foo>(someJsonString);
或者如果您确实需要 JObject
,您可以使用适当的 JsonReader
对象,以便您可以配置解析的工作方式,例如:
using var stringReader = new StringReader(someJsonString);
using var reader = new JsonTextReader(stringReader);
reader.DateParseHandling = DateParseHandling.None;
JObject someJsonObject = JObject.Load(reader);
static void Main(string[] args)
{
string someJsonString = "{\"time\": \"2021-02-24T13:15:43Z\"}";
JObject someJsonObject = JObject.Parse(someJsonString);
string time = someJsonObject.GetValue("time").Value<string>();
Console.WriteLine(time);
Console.ReadLine();
}
[使用 Newtonsoft.Json 版本 12.0.3]
为什么打印的结果是02/24/202113:15:43,而应该是2021-02-24T 13:15:43Z,我只需要字符串形式的值...这是怎么回事?
JSON.Net 会自动将日期格式的字符串解析为 DateTime
对象。如果你想防止这种情况,你要么需要使用具体的 class:
public class Foo
{
public string Time { get; set; }
}
像这样反序列化:
var f = JsonConvert.DeserializeObject<Foo>(someJsonString);
或者如果您确实需要 JObject
,您可以使用适当的 JsonReader
对象,以便您可以配置解析的工作方式,例如:
using var stringReader = new StringReader(someJsonString);
using var reader = new JsonTextReader(stringReader);
reader.DateParseHandling = DateParseHandling.None;
JObject someJsonObject = JObject.Load(reader);