考慮到我有一個客戶端和服務器,以及一類這樣的:C#JavaScriptSerializer和DateTime.MinValue穿越時區
客戶端:(時區:UTC -8)
class Foo {
public int a;
public DateTime MyTime { get; set; }
}
var serialized = new JavaScriptSerializer().Serialize(new Foo { a = 1 });
// Send serialized to server
服務器端(時區UTC-4)
// Receive JSON
var deserialized = new JavaScriptSerializer().Deserialize<Foo>(serialized);
if (deserialized.MyTime == DateTime.MinValue) {
// dostuff
}
我在這裏的問題是,JavaScriptSerializer.Serialize(foo)
,確實MyTime.MinValue.ToUniversalTime()
這給了我1月0001 08:00:00。接下來,當我在服務器端反序列化時,它會在DateTime.MinValue
上看到8小時,if測試失敗。我也不能做到本地時間,因爲服務器和客戶端不在同一個時區,所以localtime會給我1. january 0001 04:00:00。
在本月底我要提問:
- 什麼是處理這個因爲
JavaScriptSerializer()
負責呼叫.ToUniversalTime()
的最佳途徑。我的 目前的做法是隻檢查大約0年的時間範圍。 - 鑑於我們有
DateTime.MinValue
,應該不要指望這個值總是正好如此。DateTime.MinValue.ToUniversalTime()
不應該等於DateTime.MinValue
?基本上我問是否應該有一個明確的,如果在所有轉換例程中尋找DateTime.MinValue
。
謝謝。
JavaScriptSerializer: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx
日期時間: http://msdn.microsoft.com/en-us/library/system.datetime.aspx
此外,對於這樣的問題的性能和解決方案,建議使用Newtonsoft.Json而不是JavascriptSerializer。 – Alxandr
你使用'DateTime.MinValue'作爲'null'的替代嗎?如果是,爲什麼不使用'public DateTime? MyTime「並將它設置爲null而不是用MinValue打擾? –