JObject.Parse转化jsonstring带时区时间会被自动转化而不是保留原来的值
using FluentAssertions;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace DemoUnitTest;
public class UnitTest1
{
[Fact]
public void Test1()
{
//
var settings = new JsonSerializerSettings()
{
//不对时间进行处理,单纯把它当作字符串
DateParseHandling = DateParseHandling.None
};
//测试json string的时间问题
var student1 = new TestStudent()
{
//东八区
Birthday = "2025-07-16T12:00:00+08:00",
//utc+10
Birthday2 = "2025-07-16T12:00:00+10:00"
};
var studentJson = JsonConvert.SerializeObject(student1, Formatting.Indented, settings);
var deserializeTestStudent = JsonConvert.DeserializeObject<TestStudent>(studentJson, settings);
//这里会把与你运行的机器的时区不一样的会自动转化,比如我们是+8,则birthday 不会变,而birthday2会变化。
var jObject = JObject.Parse(studentJson);
var birthday = jObject["Birthday"]!.Value<string>();
var birthday2 = jObject["Birthday2"]!.Value<string>();
var flag = birthday != student1.Birthday || birthday2 != student1.Birthday2 ? true : false;
flag.Should().BeTrue();
student1.Should().BeEquivalentTo(deserializeTestStudent);
}
public class TestStudent
{
public string Birthday { set; get; }
public string Birthday2 { set; get; }
}
}
调试结果:也可以自己把本地电脑修改时区,时间也会自动被转化。
