@@ -27,31 +27,45 @@ public override bool CanProcess(Type type) {
27
27
public override fsResult TrySerialize ( object instance , out fsData serialized , Type storageType ) {
28
28
if ( instance is DateTime ) {
29
29
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
+ }
31
36
return fsResult . Success ;
32
37
}
33
38
34
39
if ( instance is DateTimeOffset ) {
35
40
var dateTimeOffset = ( DateTimeOffset ) instance ;
36
- serialized = new fsData ( dateTimeOffset . ToString ( DateTimeOffsetFormatString ) ) ;
41
+ serialized = new fsData ( dateTimeOffset . Ticks ) ;
37
42
return fsResult . Success ;
38
43
}
39
44
40
45
if ( instance is TimeSpan ) {
41
46
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
+ }
43
52
return fsResult . Success ;
44
53
}
45
54
46
55
throw new InvalidOperationException ( "FullSerializer Internal Error -- Unexpected serialization type" ) ;
47
56
}
48
57
49
58
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 ) ;
52
61
}
53
62
54
63
if ( storageType == typeof ( DateTime ) ) {
64
+ if ( Serializer . Config . SerializeDateTimeAsInteger && data . IsInt64 ) {
65
+ instance = new DateTime ( data . AsInt64 ) ;
66
+ return fsResult . Success ;
67
+ }
68
+
55
69
DateTime result ;
56
70
if ( DateTime . TryParse ( data . AsString , null , DateTimeStyles . RoundtripKind , out result ) ) {
57
71
instance = result ;
@@ -84,6 +98,11 @@ public override fsResult TryDeserialize(fsData data, ref object instance, Type s
84
98
}
85
99
86
100
if ( storageType == typeof ( TimeSpan ) ) {
101
+ if ( Serializer . Config . SerializeDateTimeAsInteger && data . IsInt64 ) {
102
+ instance = new TimeSpan ( data . AsInt64 ) ;
103
+ return fsResult . Success ;
104
+ }
105
+
87
106
TimeSpan result ;
88
107
if ( TimeSpan . TryParse ( data . AsString , out result ) ) {
89
108
instance = result ;
0 commit comments