让我们假设下面的示例代码:
[<Literal>]
let jsonSample =
"""
{
"TimeInterval": {
"Start" : "2010-01-01",
"End" : "2010-01-02"
}
}
"""
type MyJson = JsonProvider<jsonSample>
TypeProvider成功地识别了要DateTime的字段的类型,但是它会自动将"DateTimeKind“字段设置为"Local”。因此,我的代码变得依赖于运行它的机器和Windows设置中设置的时区。
当我尝试往返以下记录时:
{ "TimeInterval": { "Start" : "2010-01-01", "End" : "2010-01-02" } }
并且我的机器设置为"Europe/Bern +1",我结束了序列化
{ "TimeInterval": { "Start" : "2010-01-01T00:00:00000+01:00", "End" : "2010-01-02T00:00:00000+01:00" } }
是否可以更改此行为并指示类型提供程序将DateTime的"Kind“字段保留为”未指定“?
编辑:
我通过以下方式进行往返:
let json = MyJson.Parse inFilePath
use outputStream = new StreamWriter(outFilePath, false)
outputStream.WriteLine (json.JsonValue.ToString())
json.JsonValue.ToString()
发布于 2020-07-22 19:47:06
我不认为有一种方法可以在JSON类型提供程序中配置时区处理。这永远是一个噩梦,无论你如何处理它,所以我认为我们必须为它添加太多的参数,让人们做他们可能需要做的一切。
不幸的是,我的建议是更改样本,这样您就可以获得string
形式的值。这将意味着您将不得不自己处理日期,但它应该可以解决往返问题。
[<Literal>]
let jsonSample =
"""
{
"TimeInterval": {
"Start" : "handling dates is pain / 2010-01-01",
"End" : "handling dates is pain / 2010-01-02"
}
}
"""
https://stackoverflow.com/questions/63037937
复制