@@ -27,31 +27,45 @@ public override bool CanProcess(Type type) {
2727 public override fsResult TrySerialize ( object instance , out fsData serialized , Type storageType ) {
2828 if ( instance is DateTime ) {
2929 var dateTime = ( DateTime ) instance ;
30- serialized = new fsData ( dateTime . ToString ( DateTimeFormatString ) ) ;
30+ if ( Serializer . Config . SerializeDateTimeAsInteger ) {
31+ serialized = new fsData ( dateTime . Ticks ) ;
32+ } else {
33+ serialized = new fsData ( dateTime . ToString ( DateTimeFormatString ) ) ;
34+ return fsResult . Success ;
35+ }
3136 return fsResult . Success ;
3237 }
3338
3439 if ( instance is DateTimeOffset ) {
3540 var dateTimeOffset = ( DateTimeOffset ) instance ;
36- serialized = new fsData ( dateTimeOffset . ToString ( DateTimeOffsetFormatString ) ) ;
41+ serialized = new fsData ( dateTimeOffset . Ticks ) ;
3742 return fsResult . Success ;
3843 }
3944
4045 if ( instance is TimeSpan ) {
4146 var timeSpan = ( TimeSpan ) instance ;
42- serialized = new fsData ( timeSpan . ToString ( ) ) ;
47+ if ( Serializer . Config . SerializeDateTimeAsInteger ) {
48+ serialized = new fsData ( timeSpan . Ticks ) ;
49+ } else {
50+ serialized = new fsData ( timeSpan . ToString ( ) ) ;
51+ }
4352 return fsResult . Success ;
4453 }
4554
4655 throw new InvalidOperationException ( "FullSerializer Internal Error -- Unexpected serialization type" ) ;
4756 }
4857
4958 public override fsResult TryDeserialize ( fsData data , ref object instance , Type storageType ) {
50- if ( data . IsString == false ) {
51- return fsResult . Fail ( "Date deserialization requires a string, not " + data . Type ) ;
59+ if ( data . IsString == false && ( data . IsInt64 == false || Serializer . Config . SerializeDateTimeAsInteger == false || instance is DateTimeOffset ) ) {
60+ return fsResult . Fail ( "Date deserialization requires a string or int , not " + data . Type ) ;
5261 }
5362
5463 if ( storageType == typeof ( DateTime ) ) {
64+ if ( Serializer . Config . SerializeDateTimeAsInteger && data . IsInt64 ) {
65+ instance = new DateTime ( data . AsInt64 ) ;
66+ return fsResult . Success ;
67+ }
68+
5569 DateTime result ;
5670 if ( DateTime . TryParse ( data . AsString , null , DateTimeStyles . RoundtripKind , out result ) ) {
5771 instance = result ;
@@ -84,6 +98,11 @@ public override fsResult TryDeserialize(fsData data, ref object instance, Type s
8498 }
8599
86100 if ( storageType == typeof ( TimeSpan ) ) {
101+ if ( Serializer . Config . SerializeDateTimeAsInteger && data . IsInt64 ) {
102+ instance = new TimeSpan ( data . AsInt64 ) ;
103+ return fsResult . Success ;
104+ }
105+
87106 TimeSpan result ;
88107 if ( TimeSpan . TryParse ( data . AsString , out result ) ) {
89108 instance = result ;
0 commit comments