2013-09-27 124 views
1

我最近将我的项目的ServiceStack.Text从3.9.23升级到最新的stable。ServiceStack.Text输出UTC偏移量

我有一些单元测试,以确保我们输出的日期格式不会改变。升级后他们现在失败了。该测试是这样的:

[Test] 
[TestCase(2012, 06, 22, 03, 26, 23, 837, "\"\\/Date(1340328383837+0200)\\/\"")] // Daylight savings time test in DK (+0200) 
[TestCase(1997, 10, 30, 11, 23, 49, 060, "\"\\/Date(878207029060+0100)\\/\"")] 
[TestCase(2050, 01, 14, 00, 00, 00, 000, "\"\\/Date(2525727600000+0100)\\/\"")] 
public void SerializeDate_ReturnsExpectedOutput(int year, int month, int day, int hour, int minute, int second, int ms, string expected) 
{ 
    var dt = new DateTime(year, month, day, hour, minute, second, ms).ToUniversalTime(); 
    dt = TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")); 

    string serialized = ServiceStack.Text.JsonSerializer.SerializeToString(dt); 

    Assert.AreEqual(expected, serialized, "DateTime Serialization failure, got {0} but expected {1} for DateTime = {2}", 
     serialized, expected, dt); 
} 

测试失败,因为现在ServiceStack.Text输出的UTC零偏移,这不是我想要的东西,所以我得到:

String lengths are both 30. Strings differ at index 21. 
    Expected: ""\\/Date(1340328383837+0200)\\/"" 
    But was: ""\\/Date(1340328383837-0000)\\/"" 
    ---------------------------------^ 

如何配置ServiceStack.Text使用旧的行为?

回答

1

设置:

ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.JsonDateHandler.DCJSCompatible; 

解决了这个问题对我来说,这基本上就是我需要DateTime是否与DateTimeKind.Unspecified因为如果他们在那里本地时间来对待。我查看了ServiceStack.Text源,而这个处理程序就是这么做的。请注意,处理程序会抛出UTC偏移量,并将时间当作本地时间,将字符串解析为DateTime输入。 (幸运的是也适用于我的应用程序)。