Newtonsoft JSON今天从NuGet(我认为是V12),.NET框架V4.7.2,web服务返回的简化示例中提取。代码和输出如下。所有返回的日期时间表单均声明为UTC。当反序列化为类的datetimeoffset成员时,是否有反序列化设置选项将无时区信息视为UTC?样本返回值为“2015-08-04T22:04:50”
如果datetimeoffset成员未标记为可空,则不带时区的可分析datetimeoffset将返回默认的未初始化值(1/1/0001 12:00:00 AM 00:00)。换句话说,反序列化不成功。用DateTimeOffset分析时,字符串相同。Parse将其视为本地时区,并返回本地时区中的有效日期时间。不好,但是可以用其他代码处理。
如果date时间偏移成员被标记为可空,则该成员保持为空(无),这也是不正确的。
类中日期时间偏移量的初始化值: 8/4/2015 10:04:50 PM 00:00
纽顿软件。JSON . JSON convert . serialize object序列化字符串:{ " dtore turned ":" 2015-08-04t 22:04:50 00:00 " }
来自web服务的序列化字符串:{ " dtore turned ":" 2015-08-04t 22:04:50 " }
datetimeoffset的取消排序值:8/4/2015 10:04:50 PM 00:00
类中未初始化的datetimeoffset值:1/1/0001 12:00:00 AM 00:00
datetimeoffset的非序列化值:1/1/0001 12:00:00 AM 00:00
类中datetimeoffset的初始化值:8/4/2025 10:04:50 PM 00:00
纽顿软件。JSON . JSON convert . serialize object序列化字符串:{ " dtore turned ":" 2025-08-04t 22:04:50 00:00 " }
来自web服务的序列化字符串:{ " dtore turned ":" 2025-08-04t 22:04:50 " }
datetimeoffset的非序列化值:2025年8月4日10:04:50 PM 00:00
反序列化前类中日期时间偏移量的值为无
类中datetimeoffset的deserialzied值为空
进口系统。IO公共类表单1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim obj1a As New TestClass1 ' transfers_v1_incoming
obj1a.dtoReturned = DateTimeOffset.Parse("2015-08-04T22:04:50Z")
Debug.Print("initialized value of datetimeoffset in class: " & obj1a.dtoReturned.ToString)
Dim strIn As String = Newtonsoft.Json.JsonConvert.SerializeObject(obj1a)
Debug.Print("Newtonsoft.Json.JsonConvert.SerializeObject serialized string: " & strIn)
strIn = Replace(strIn, "+00:00", "")
Debug.Print("serialized string from web service: " & strIn)
Newtonsoft.Json.JsonConvert.DeserializeObject(strIn, obj1a.GetType)
Debug.Print("deserialzied value of datetimeoffset: " & obj1a.dtoReturned.ToString)
Dim obj1b As New TestClass1 ' transfers_v1_incoming
Debug.Print("uninitialized value of datetimeoffset in class: " & obj1b.dtoReturned.ToString)
Newtonsoft.Json.JsonConvert.DeserializeObject(strIn, obj1b.GetType)
Debug.Print("deserialzied value of datetimeoffset: " & obj1b.dtoReturned.ToString)
Dim obj2a As New TestClass2
obj2a.dtoReturned = DateTimeOffset.Parse("2025-08-04T22:04:50Z")
Debug.Print("initialized value of datetimeoffset in class: " & obj2a.dtoReturned.ToString)
strIn = Newtonsoft.Json.JsonConvert.SerializeObject(obj2a)
Debug.Print("Newtonsoft.Json.JsonConvert.SerializeObject serialized string: " & strIn)
strIn = Replace(strIn, "+00:00", "")
Debug.Print("serialized string from web service: " & strIn)
Newtonsoft.Json.JsonConvert.DeserializeObject(strIn, obj2a.GetType)
Debug.Print("deserialzied value of datetimeoffset: " & obj2a.dtoReturned.ToString)
Dim obj2b As New TestClass2
If IsNothing(obj2b.dtoReturned) Then
Debug.Print("value of datetimeoffset in class before deserialize is nothing")
Else
Debug.Print("uninitialized value of datetimeoffset in class before deserialize: " & obj2b.dtoReturned.ToString)
End If
Newtonsoft.Json.JsonConvert.DeserializeObject(strIn, obj2b.GetType)
If IsNothing(obj2b.dtoReturned) Then
Debug.Print("deserialzied value of datetimeoffset in class is nothing")
Else
Debug.Print("deserialzied value of datetimeoffset: " & obj2b.dtoReturned.ToString)
End If
End Sub
Class TestClass1
Public Property dtoReturned As DateTimeOffset
End Class
Class TestClass2
Public Property dtoReturned As DateTimeOffset?
End Class
结束类
您正在调用Newtonsoft.Json.JsonConvert。反序列化对象(strIn,obj.GetType)
,就好像它要变异obj
变量一样。不会的。
相反,您需要使用从该方法返回的对象。您还需要将它强制转换到您的类中。
obj = CType(Newtonsoft.Json.JsonConvert.DeserializeObject(strIn, obj.GetType), TestClass1)
或者更简单,使用采用泛型类型定义的重载:
obj = Newtonsoft.Json.JsonConvert.DeserializeObject(Of TestClass1)(strIn)
我正在尝试使用Jackson将ISO8601格式的日期反序列化为Java8。我向ObjectMapper注册了JavaTimeModule,并关闭了设置。 但是,如果试图反序列化将不起作用,因为JavaTimeModule似乎只会反序列化使用UTC时区偏移量格式化的日期时间(例如)。然后我尝试使用注释,如下所示: 就像这样: 然而,这两种方法都不起作用,我得到了一个例外: 这意味着timezone
问题内容: 我正在尝试使用Jackson 将ISO8601格式的日期反序列化为Java8 。我向ObjectMapper注册了JavaTimeModule,并关闭了该设置。 但是,如果尝试反序列化,它将无法正常工作,因为JavaTimeModule似乎只会反序列化具有UTC时区偏移量的日期时间(例如)。然后,我尝试使用如下注释: 像这样: 但是,这些都不起作用,我得到一个例外: 这意味着将忽略ti
问题内容: 为什么json序列化不适用于datetime对象。据我了解json序列化,任何对象的基本思想都可以调用 内置函数,然后对作为响应得到的对象进行urlencode。但是在日期时间的情况下,我得到以下错误 虽然有一种方法可以将已经可用的对象进行字符串化,但是似乎有意识地决定不这样做,为什么会这样呢? 问题答案: 不,它在模块中无法正常工作。该模块为您提供了默认的编码器:。您需要扩展它以提供
我需要将查询中的日期值转换为带有时区的时间戳,但目前我得到的时区区域(“欧洲/巴黎”)是EF使用的无效区域。 例如,在执行此操作时:
我对jackson进行了配置,以便在和时给出一个简单的字符串表示。这可以在序列化过程中找到,例如,当我在REST API上获得数据时。 但反过来就不行了。当我试图将数据发送到服务器,并且应该将JSON解析为java对象时,会引发此异常: 很抱歉没有提到我在单元测试中。 TestClass:
下面是我的问题的一个简单例子, 例如,用户选择了一个时区“America/New_York”,因此日历页面中的所有日期都将显示在该时区中。 现在,如果我们在“05:00 pm”创建一个事件,那么我们如何在“America/New_York”时区中创建时间为5pm的日期, 谢谢