2016-07-15 2 views
0

Почему datetime + offset преобразуется в localtime + offset при преобразовании json-строки в Jobject.Datetime в строке json преобразуется в localtime

Вот код.

string dataValue = @"{""Time"":""2016-07-15T20:03:41+08:00""}"; 
JObject json = JObject.Parse(dataValue); 
Console.Write(json.ToString()); 

Выход:

{ 
    "Time": "2016-07-15T17:33:41+05:30" 
} 

Ожидаемый результат:

{ 
    "Time": "2016-07-15T20:03:41+08:00" 
} 
+0

Какой json-парсер? Newtonsoft? – Neil

+0

Да, его newtonsoft – KhanS

ответ

3

По умолчанию он будет использовать местное время, но вы можете изменить настройки по умолчанию:

var dataValue = @"{""Time"":""2016-07-15T20:03:41+08:00""}"; 

var jsonSerializerSettings = new JsonSerializerSettings 
{ 
    DateTimeZoneHandling = DateTimeZoneHandling.Utc 
}; 

var json = JsonConvert.DeserializeObject<JObject>(dataValue, jsonSerializerSettings); 

Если вы не заботитесь о дата преобразуется в DateTime типа, вы можете сказать Json.NET просто игнорировать даты и разобрать значение в виде строки :

var dataValue = @"{""Time"":""2016-07-15T20:03:41+08:00""}"; 

var jsonSerializerSettings = new JsonSerializerSettings 
{ 
    DateParseHandling = DateParseHandling.None 
}; 

var json = JsonConvert.DeserializeObject<JObject>(dataValue, jsonSerializerSettings) 

Таким образом он будет оставаться точно так, как ваш вклад ,

+0

Это преобразование в utc и удаление смещения («Время»: «2016-07-15T12: 03: 41Z»), я хочу сохранить исходный часовой пояс и смещение – KhanS

+0

Литерал «Z» - это ISO 8601 для времени UTC, если вы хотите получить смещение, вы можете изменить свойство форматирования 'JsonSerializerSettings'. –

+0

установка DateParseHandling = DateParseHandling. Не работал на меня – KhanS

Смежные вопросы