鉴于我有一个客户端和服务器,以及这样的类:
客户端:(TimeZone: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
服务器端:( TimeZone UTC-4)
// Receive JSON
var deserialized = new JavaScriptSerializer().Deserialize<Foo>(serialized);
if (deserialized.MyTime == DateTime.MinValue) {
// dostuff
}
我的问题是JavaScriptSerializer.Serialize(foo)
,MyTime.MinValue.ToUniversalTime()
给了我 1。 1月0001 08:00:00 。接下来,当我在服务器端进行反序列化时,它会在DateTime.MinValue
上看到8小时,并且if测试失败。我也不能做本地时间,因为服务器和客户端不在同一时区,所以本地时间会给我 1。 1月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
答案 0 :(得分:0)
只需将它们作为字符串而不是DateTimes传递。 yyyy-MM-dd hh:mm:ssZ
将使其文化中立并将其转换为UTC,这将忽略所有时区。这在C#DateTime中用作代码u
。
答案 1 :(得分:0)
使用DateTimeOffset
代替DateTime
。它看起来像序列化程序序列化结构如下:
{"a":1,"MyTime":"\/Date(-62135596800000)\/"}
这意味着可以通过服务器端的DateTime
和DateTimeOffset
字段对此字符串进行反序列化。看起来这两个都将上面的字符串反序列化为午夜,所以我假设反序列化器将数字解释为+00:00偏移量,因为它从线路中脱离。