Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如果没有为DateTimeOffset提供JSON反序列化,则假定为本地时区_Vb.net_Json.net_Datetimeoffset - Fatal编程技术网

Vb.net 如果没有为DateTimeOffset提供JSON反序列化,则假定为本地时区

Vb.net 如果没有为DateTimeOffset提供JSON反序列化,则假定为本地时区,vb.net,json.net,datetimeoffset,Vb.net,Json.net,Datetimeoffset,所以我用一个简单的设置测试了一整天。我正在将JSON字符串反序列化为类对象。唯一的属性用于DateTimeOffset值。为了测试,我没有提供带有JSON date属性的时区,因为我无法控制第三方将向我发送什么。反序列化后,该属性将假定为系统的时区。我知道这可能是故意的,但是否可以假定UTC,因为我相信这对我的应用程序来说是一个更好的选择 我想要的是:01/01/1900 00:00:00+00:00 我曾尝试使用JsonConverters,但它似乎在到达ReadJson方法之前将其解析为Da

所以我用一个简单的设置测试了一整天。我正在将JSON字符串反序列化为类对象。唯一的属性用于
DateTimeOffset
值。为了测试,我没有提供带有JSON date属性的时区,因为我无法控制第三方将向我发送什么。反序列化后,该属性将假定为系统的时区。我知道这可能是故意的,但是否可以假定UTC,因为我相信这对我的应用程序来说是一个更好的选择

我想要的是:
01/01/1900 00:00:00+00:00

我曾尝试使用
JsonConverters
,但它似乎在到达
ReadJson
方法之前将其解析为
DateTimeOffset
,并且它不允许我访问属性值的JSON字符串版本,因此我可以正确解析它

代码和示例如下:

Public Class MyTest

    Public Property DTO As DateTimeOffset = #1900-01-01#

End Class

Public Sub TestMethod()

    Dim myDate As String = "{""DTO"": ""1900-01-01T00:00:00""}"

    Dim o = JsonConvert.DeserializeObject(Of MyTest)(myDate, 
        New JsonSerializerSettings With {
            .DateParseHandling = DateParseHandling.DateTimeOffset,
            .DateTimeZoneHandling = DateTimeZoneHandling.Utc
        })

 End Sub
如您所见,它假设我的+2时区:


我能够通过以下设置哄骗Json.Net将没有偏移量的
DateTimeOffset
视为UTC:

Dim settings As New JsonSerializerSettings With {
    .DateParseHandling = DateParseHandling.None
}
settings.Converters.Add(New IsoDateTimeConverter With {
    .DateTimeStyles = DateTimeStyles.AssumeUniversal
})

Dim o = JsonConvert.DeserializeObject(Of MyTest)(myDate, settings)
工作演示:

使用
JsonConverter
处理日期时,关键是将
DateParseHandling
设置为
None
。否则,内部读取器将首先尝试处理它