Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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
如何阻止Json.NET JArray.Parse更改utc日期?_.net_Json.net - Fatal编程技术网

如何阻止Json.NET JArray.Parse更改utc日期?

如何阻止Json.NET JArray.Parse更改utc日期?,.net,json.net,.net,Json.net,如果我有一个JSON字符串,其属性看起来像UTC日期,例如:“2017-08-25T16:49:27.777-07:00”,JSON.NET的JArray.Parse会将日期修改为另一个时区。有没有办法禁用此功能?我希望约会保持原样。 我试着把这个放在解析之前 JsonConvert.DefaultSettings = () => new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };

如果我有一个JSON字符串,其属性看起来像UTC日期,例如:“2017-08-25T16:49:27.777-07:00”,JSON.NET的JArray.Parse会将日期修改为另一个时区。有没有办法禁用此功能?我希望约会保持原样。 我试着把这个放在解析之前

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateParseHandling = DateParseHandling.None
};
而且没有效果。JsonLoadSettings类没有处理日期的属性

更新

这是在我改变电脑时区后发生的-7是PDT。我试着用不同的时区测试我的日期转换。将我的计算机时区从太平洋更改为东部后的日期,以JArray为单位。解析为“2017-08-25T19:49:27.753-04:00”。这打乱了我自己的日期转换,我试图从假定总是utc转换到本地机器时间。

我刚刚测试了两种不同的方法,一种是使用
JsonConvert.SerializeObject
,另一种是使用
JArray.Load(JsonReader)
。这两种方法都适用于我,无论我所在的时区如何

var serialized = "[\"2017-08-25T20:57:14.3914448+02:00\",\"2017-08-25T18:57:14.3914448+00:00\"]";

//Using JsonConvert.DeserializeObject
var resultA = JsonConvert.DeserializeObject<IEnumerable<DateTimeOffset>>(serialized);

//Using JArray /w JsonReader
var jsonReader = new JsonTextReader(new StringReader(serialized)){DateParseHandling = DateParseHandling.DateTimeOffset};
var resultB = JArray.Load(jsonReader);
var serialized=“[\”2017-08-25T20:57:14.3914448+02:00\”,“2017-08-25T18:57:14.3914448+00:00\”;
//使用JsonConvert.DeserializeObject
var resultA=JsonConvert.DeserializeObject(序列化);
//使用JArray/wjsonreader
var jsonReader=new JsonTextReader(new StringReader(序列化)){DateParseHandling=DateParseHandling.DateTimeOffset};
var resultB=JArray.Load(jsonReader);
但是,我不明白你为什么说:

这打乱了我自己的日期转换,我试图从假定总是utc转换为本地机器时间


这显然不是UTC时间,因此不应将其视为UTC时间。UTC基本上是格林威治时间(时区偏移量0),但您的日期时间字符串表示的时区偏移量为-7小时。

它没有做任何我想坚持使用JArray的事情。否则我必须更改大量代码。这是不带偏移量的UTC日期时间。我希望JArray.Parse忽略偏移量。您不能使用JArray.Parse(请参阅)。另外,您是说日期字符串的时区部分是错误的吗?如果是这样,您是否可以控制它的生成方式,以便将其更改为Z或+00:00以正确表示UTC?现在使用JArray.Load可以正常工作。我忽略了datetime中的偏移量。