gpt4 book ai didi

c# - .net DateTime 序列化反序列化错误

转载 作者:行者123 更新时间:2023-11-30 21:50:29 28 4
gpt4 key购买 nike

如果您使用嵌入式 .net JavaScriptSerializer 序列化和反序列化 DateTime,如果您使用的是 UTC+something,您将得到两个不同的日期!

例子(假设你和我现在一样在UTC+2)

JavaScriptSerializer myJson = new JavaScriptSerializer();

DateTime myDate = DateTime.Now; //suppose 2016-03-29 16:12:00
strSerialized = myJson.Serialize(myDate);

//DO WHAT YOU NEED WITH IT...

DateTime myDateDes = myJson.Deserialize<DateTime>(strSerialized);
Label1.Text=myDateDes.ToString();//it gives you 2016-03-29 14:12:00 ! WRONG! IT's in UTC+0 ! Has 2 HOURS less !!!

因此,当您获得反序列化日期时,它会默认为您提供 UTC+0 值...!!

这不同于JavaScriptSerializer UTC DateTime issues因为那篇文章描述了不同日期时间数据类型反序列化的区别,并提供了一个不能解决问题的解决方案(.UtcDateTime)。事实上,尝试使用 .utcDateTime 反序列化序列化的 DateTime 总是会给您错误的 UTC+0 日期...

最佳答案

有两种不同的解决方案:反序列化时使用 ToLocalTime() 或使用 Newtonsoft.Json。

所以相同的代码,“固定”,在第一种情况下应该是:

JavaScriptSerializer myJson = new JavaScriptSerializer();

DateTime myDate = DateTime.Now; //suppose 2016-03-29 16:12:00
strSerialized = myJson.Serialize(myDate);

//DO WHAT YOU NEED WITH IT...

DateTime myDateDes = myJson.Deserialize<DateTime>(strSerialized).ToLocalTime();

Label1.Text=myDateDes.ToString();//it gives you 2016-03-29 16:12:00 !!! CORRECT !

否则,使用 Newtonsoft.Json(你首先需要从 nuGet 安装它,然后在顶部添加一个“using Newtonsoft.Json”),然后像这样使用它:

DateTime myDate = DateTime.Now; //suppose 2016-03-29 16:12:00
strSerialized = JsonConvert.SerializeObject(myDate);

//DO WHAT YOU NEED WITH IT...

DateTime myDateDes = JsonConvert.DeserializeObject<DateTime>(strSerialized);
Label1.Text=myDateDes.ToString();//NO need to convert to LocalTime... it already gives you 2016-03-29 16:12:00 !!! CORRECT !

我希望这对其他人有用...我在谷歌上搜索了很多,但没有发现只有 Microsoft 序列化程序才会出现的这个问题...

关于c# - .net DateTime 序列化反序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287255/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com