如何将字符串解析为 JObject 忽略时区



我有一个json字符串,需要转换为JObject。

例:

String result = ""{"totalSize":1,"done":true,"records":[{"attributes":{"type":"Municipio__c","url":"/services/data/v37.0/sobjects/Municipio__c/a0V2C000000gIgzUAE"},"Id":"a0V2C000000gIgzUAE","LastModifiedDate":"2017-08-01T18:12:04.000+0000"}]}";"
var json = JObject.Parse(result);

但是在转换的那一刻,最后修改日期已将值更改为我的时区

诸如此类:

{{
  "totalSize": 1,
  "done": true,
  "records": [
    {
      "attributes": {
        "type": "Municipio__c",
        "url": "/services/data/v37.0/sobjects/Municipio__c/a0V2C000000gIgzUAE"
      },
      "Id": "a0V2C000000gIgzUAE",
      "LastModifiedDate": "2017-08-01T15:12:04-03:00"
    }
  ]
}}

时间已更改:18:12:04 (hh:MM:ss) 到 15:12:04 (hh:MM:ss)。

有没有办法忽略解析时的时区?

您必须将

JsonConvert与适当的DateTimeZoneHandling一起使用:

var json = JsonConvert.DeserializeObject
                       ( result
                       , new JsonSerializerSettings()
                         { DateTimeZoneHandling = DateTimeZoneHandling.Utc
                         }
                       );

时间实例是相同的。 18:12:04+00:0015:12:04-03:0021:12:04+03:00(希腊的当前偏移量)相同。

解析日期值时的默认行为是生成本地DateTime值,即其 Kind 属性将为 DatTimeKind.Local'。其他 DateTimeKind 值为 UTC 和 Unsti。

这并不意味着值发生了变化。 不过,Local是一个相对术语 - 不知道实际偏移量,很容易误解它。

正如 Patrick Hofman 所解释的那样,您可以通过设置 DateTimeZoneHandling 设置来指定使用 UTC。

更好的方法是使用 DateParseHandling = DateParseHandling.DateTimeOffset 属性指定将使用DateTimeOffset而不是DateTime。这将返回保留原始时区信息:

var settings=new JsonSerializerSettings{ 
    DateParseHandling = DateParseHandling.DateTimeOffset
};
var json = JsonConvert.DeserializeObject( result, settings);

在这种情况下,该值将是具有原始时间的日期时间偏移量和 00:00 的偏移量。

我在这里使用dynamic来减少铸造噪音:

var settings=new JsonSerializerSettings{ 
    DateParseHandling = DateParseHandling.DateTimeOffset
};
dynamic json = JsonConvert.DeserializeObject( result, settings);
var value=(DateTimeOffset)(json.records[0].LastModifiedDate.Value);
Console.WriteLine("{0:o}",value);

这将返回:

2017-08-01T18:12:04.0000000+00:00

相关内容

  • 没有找到相关文章

最新更新