带有时间戳字符串的 Json.NET (Newtonsoft) 解析器发生了什么?

Gre*_*ire 3 .net c# json json.net

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();
}
Run Code Online (Sandbox Code Playgroud)

[使用Newtonsoft.Json 12.0.3版]

为什么打印结果是02/24/2021 13:15:43而应该是2021-02-24T13 :15:43Z,我只需要该值作为字符串......发生了什么?

Dav*_*idG 6

JSON.Net 会自动将日期格式的字符串解析为DateTime对象。如果你想防止这种情况,你要么需要使用一个具体的类:

public class Foo
{
    public string Time { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并像这样反序列化:

var f = JsonConvert.DeserializeObject<Foo>(someJsonString);
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实需要JObject,则可以使用适当的JsonReader对象,以便配置解析的工作方式,例如:

using var stringReader = new StringReader(someJsonString);
using var reader = new JsonTextReader(stringReader);
reader.DateParseHandling = DateParseHandling.None;
JObject someJsonObject = JObject.Load(reader);
Run Code Online (Sandbox Code Playgroud)