1+ using System ;
2+ using NUnit . Framework ;
3+
4+ #if NET6_0
5+ namespace ServiceStack . Text . Tests ;
6+
7+ public class DateOnlyDto
8+ {
9+ public DateOnly Date { get ; set ; }
10+
11+ protected bool Equals ( DateOnlyDto other ) => Date . Equals ( other . Date ) ;
12+ public override bool Equals ( object obj )
13+ {
14+ if ( ReferenceEquals ( null , obj ) ) return false ;
15+ if ( ReferenceEquals ( this , obj ) ) return true ;
16+ if ( obj . GetType ( ) != this . GetType ( ) ) return false ;
17+ return Equals ( ( DateOnlyDto ) obj ) ;
18+ }
19+ public override int GetHashCode ( ) => Date . GetHashCode ( ) ;
20+ }
21+
22+ public class TimeOnlyDto
23+ {
24+ public TimeOnly Time { get ; set ; }
25+
26+ protected bool Equals ( TimeOnlyDto other ) => Time . Equals ( other . Time ) ;
27+ public override bool Equals ( object obj )
28+ {
29+ if ( ReferenceEquals ( null , obj ) ) return false ;
30+ if ( ReferenceEquals ( this , obj ) ) return true ;
31+ if ( obj . GetType ( ) != this . GetType ( ) ) return false ;
32+ return Equals ( ( TimeOnlyDto ) obj ) ;
33+ }
34+ public override int GetHashCode ( ) => Time . GetHashCode ( ) ;
35+ }
36+
37+ public class NullableDateOnlyDto
38+ {
39+ public DateOnly ? Date { get ; set ; }
40+
41+ protected bool Equals ( NullableDateOnlyDto other ) => Date . Equals ( other . Date ) ;
42+ public override bool Equals ( object obj )
43+ {
44+ if ( ReferenceEquals ( null , obj ) ) return false ;
45+ if ( ReferenceEquals ( this , obj ) ) return true ;
46+ if ( obj . GetType ( ) != this . GetType ( ) ) return false ;
47+ return Equals ( ( NullableDateOnlyDto ) obj ) ;
48+ }
49+ public override int GetHashCode ( ) => ( Date ?? default ) . GetHashCode ( ) ;
50+ }
51+
52+ public class NullableTimeOnlyDto
53+ {
54+ public TimeOnly ? Time { get ; set ; }
55+
56+ protected bool Equals ( NullableTimeOnlyDto other ) => Time . Equals ( other . Time ) ;
57+ public override bool Equals ( object obj )
58+ {
59+ if ( ReferenceEquals ( null , obj ) ) return false ;
60+ if ( ReferenceEquals ( this , obj ) ) return true ;
61+ if ( obj . GetType ( ) != this . GetType ( ) ) return false ;
62+ return Equals ( ( NullableTimeOnlyDto ) obj ) ;
63+ }
64+ public override int GetHashCode ( ) => ( Time ?? default ) . GetHashCode ( ) ;
65+ }
66+
67+ public class Net6TypeTests
68+ {
69+ [ Test ]
70+ public void Can_serialize_DateOnly ( )
71+ {
72+ var date = new DateOnly ( 2001 , 1 , 13 ) ;
73+ var json = date . ToJson ( ) ;
74+ Assert . That ( json , Is . EqualTo ( "\" 2001-01-13\" " ) ) ;
75+
76+ var fromJson = json . FromJson < DateOnly > ( ) ;
77+ Assert . That ( fromJson , Is . EqualTo ( date ) ) ;
78+
79+ var dto = new DateOnlyDto { Date = date } ;
80+ json = dto . ToJson ( ) ;
81+ Assert . That ( json , Is . EqualTo ( "{\" Date\" :\" 2001-01-13\" }" ) ) ;
82+ var fromJsonDto = json . FromJson < DateOnlyDto > ( ) ;
83+ Assert . That ( fromJsonDto , Is . EqualTo ( dto ) ) ;
84+
85+ var nullableDto = new NullableDateOnlyDto { Date = date } ;
86+ json = nullableDto . ToJson ( ) ;
87+ Assert . That ( json , Is . EqualTo ( "{\" Date\" :\" 2001-01-13\" }" ) ) ;
88+ var fromJsonNullableDto = json . FromJson < NullableDateOnlyDto > ( ) ;
89+ Assert . That ( fromJsonNullableDto , Is . EqualTo ( nullableDto ) ) ;
90+ }
91+
92+ [ Test ]
93+ public void Can_serialize_DateOnly_UnixTime ( )
94+ {
95+ using ( JsConfig . With ( new Config { DateHandler = DateHandler . UnixTime } ) )
96+ {
97+ var date = new DateOnly ( 2001 , 1 , 13 ) ;
98+ var json = date . ToJson ( ) ;
99+ Assert . That ( json , Is . EqualTo ( "979344000" ) ) ;
100+
101+ var fromJson = json . FromJson < DateOnly > ( ) ;
102+ Assert . That ( fromJson , Is . EqualTo ( date ) ) ;
103+
104+ var dto = new DateOnlyDto { Date = date } ;
105+ json = dto . ToJson ( ) ;
106+ Assert . That ( json , Is . EqualTo ( "{\" Date\" :979344000}" ) ) ;
107+
108+ var nullableDto = new NullableDateOnlyDto { Date = date } ;
109+ json = nullableDto . ToJson ( ) ;
110+ Assert . That ( json , Is . EqualTo ( "{\" Date\" :979344000}" ) ) ;
111+ }
112+ }
113+
114+ [ Test ]
115+ public void Can_serialize_TimeOnly ( )
116+ {
117+ var time = new TimeOnly ( 13 , 13 , 13 ) ;
118+ var json = time . ToJson ( ) ;
119+ Assert . That ( json , Is . EqualTo ( "\" PT13H13M13S\" " ) ) ;
120+
121+ var fromJson = json . FromJson < TimeOnly > ( ) ;
122+ Assert . That ( fromJson , Is . EqualTo ( time ) ) ;
123+
124+ var dto = new TimeOnlyDto { Time = time } ;
125+ json = dto . ToJson ( ) ;
126+ Assert . That ( json , Is . EqualTo ( "{\" Time\" :\" PT13H13M13S\" }" ) ) ;
127+ var fromJsonDto = json . FromJson < TimeOnlyDto > ( ) ;
128+ Assert . That ( fromJsonDto , Is . EqualTo ( dto ) ) ;
129+
130+ var nullableDto = new NullableTimeOnlyDto { Time = time } ;
131+ json = nullableDto . ToJson ( ) ;
132+ Assert . That ( json , Is . EqualTo ( "{\" Time\" :\" PT13H13M13S\" }" ) ) ;
133+ var fromJsonNullableDto = json . FromJson < NullableTimeOnlyDto > ( ) ;
134+ Assert . That ( fromJsonNullableDto , Is . EqualTo ( nullableDto ) ) ;
135+ }
136+
137+ }
138+ #endif
0 commit comments