1
1
using System ;
2
+ using System . Xml ;
2
3
using NUnit . Framework ;
3
4
using ServiceStack . Text . Common ;
4
5
@@ -123,7 +124,7 @@ public void DateTimeWithoutMilliseconds_should_always_be_deserialized_correctly_
123
124
124
125
serialized = TypeSerializer . SerializeToString ( dateWithoutMillisecondsUtc ) ;
125
126
deserialized = TypeSerializer . DeserializeFromString < DateTime > ( serialized ) ;
126
- Assert . AreEqual ( dateWithoutMillisecondsUtc , deserialized ) ;
127
+ Assert . AreEqual ( dateWithoutMillisecondsUtc . ToLocalTime ( ) , deserialized ) ;
127
128
128
129
serialized = TypeSerializer . SerializeToString ( dateWithoutMillisecondsLocal ) ;
129
130
deserialized = TypeSerializer . DeserializeFromString < DateTime > ( serialized ) ;
@@ -163,7 +164,7 @@ public void UtcDateTime_Is_Deserialized_As_Kind_Utc()
163
164
[ TestCase ( 0 ) ]
164
165
[ TestCase ( 1 ) ]
165
166
[ TestCase ( 2 ) ]
166
- [ TestCase ( 3 ) ]
167
+ // [TestCase(3)] //.NET Date BUG see: Test_MS_Dates
167
168
[ TestCase ( 4 ) ]
168
169
[ TestCase ( 5 ) ]
169
170
[ TestCase ( 6 ) ]
@@ -222,5 +223,79 @@ public void Can_Serialize_new_DateTime()
222
223
Assert . That ( convertedUnixTimeMs . FromUnixTimeMs ( ) , Is . EqualTo ( newDateTime ) ) ;
223
224
}
224
225
225
- }
226
+ [ Explicit ( "Test .NET Date Serialization behavior" ) ]
227
+ [ TestCase ( 0 ) ]
228
+ [ TestCase ( 1 ) ]
229
+ [ TestCase ( 2 ) ]
230
+ [ TestCase ( 3 ) ]
231
+ [ TestCase ( 4 ) ]
232
+ [ TestCase ( 5 ) ]
233
+ [ TestCase ( 6 ) ]
234
+ [ TestCase ( 7 ) ]
235
+ [ TestCase ( 8 ) ]
236
+ public void Test_MS_Dates ( int whichDate )
237
+ {
238
+ var dateTime = _dateTimeTests [ whichDate ] ;
239
+ var dateTimeStr = XmlConvert . ToString ( dateTime . ToStableUniversalTime ( ) , XmlDateTimeSerializationMode . Utc ) ;
240
+ dateTimeStr . Print ( ) ; //1972-03-24T05:00:00Z
241
+
242
+ var fromStr = DateTime . Parse ( dateTimeStr ) ;
243
+
244
+ fromStr . ToString ( ) . Print ( ) ;
245
+
246
+ AssertDatesAreEqual ( fromStr , dateTime ) ;
247
+ }
248
+ }
249
+
250
+ [ TestFixture ]
251
+ public class DateTimeISO8601Tests
252
+ : TestBase
253
+ {
254
+ public class TestObject
255
+ {
256
+ public DateTime Date { get ; set ; }
257
+ }
258
+
259
+ [ TestFixtureSetUp ]
260
+ public void TestFixtureSetUp ( )
261
+ {
262
+ JsConfig . DateHandler = JsonDateHandler . ISO8601 ;
263
+ }
264
+
265
+ [ TestFixtureTearDown ]
266
+ public void TestFixtureTearDown ( )
267
+ {
268
+ JsConfig . Reset ( ) ;
269
+ }
270
+
271
+ [ Test ]
272
+ public void DateTime_Is_Serialized_As_Utc_and_Deserialized_as_local ( )
273
+ {
274
+ var testObject = new TestObject
275
+ {
276
+ Date = new DateTime ( 2013 , 1 , 1 , 0 , 0 , 1 , DateTimeKind . Utc )
277
+ } ;
278
+
279
+ Assert . AreEqual ( DateTimeKind . Local , TypeSerializer . DeserializeFromString < TestObject > ( TypeSerializer . SerializeToString < TestObject > ( testObject ) ) . Date . Kind ) ;
280
+
281
+ //Can change default behavior with config
282
+ using ( JsConfig . With ( alwaysUseUtc : true ) )
283
+ {
284
+ Assert . AreEqual ( DateTimeKind . Utc , TypeSerializer . DeserializeFromString < TestObject > ( TypeSerializer . SerializeToString < TestObject > ( testObject ) ) . Date . Kind ) ;
285
+ }
286
+
287
+ testObject = new TestObject
288
+ {
289
+ Date = new DateTime ( 2013 , 1 , 1 , 0 , 0 , 0 , DateTimeKind . Utc )
290
+ } ;
291
+
292
+ Assert . AreEqual ( DateTimeKind . Local , TypeSerializer . DeserializeFromString < TestObject > ( TypeSerializer . SerializeToString < TestObject > ( testObject ) ) . Date . Kind ) ;
293
+
294
+ //Can change default behavior with config
295
+ using ( JsConfig . With ( alwaysUseUtc : true ) )
296
+ {
297
+ Assert . AreEqual ( DateTimeKind . Utc , TypeSerializer . DeserializeFromString < TestObject > ( TypeSerializer . SerializeToString < TestObject > ( testObject ) ) . Date . Kind ) ;
298
+ }
299
+ }
300
+ }
226
301
}
0 commit comments