@@ -68,13 +68,13 @@ public static void WriteAny(this IOpenApiWriter writer, JsonNode node)
68
68
writer . WriteObject ( node as JsonObject ) ;
69
69
break ;
70
70
case JsonValueKind . String : // Primitive
71
- writer . WritePrimitive ( node ) ;
71
+ writer . WritePrimitive ( node . AsValue ( ) ) ;
72
72
break ;
73
73
case JsonValueKind . Number : // Primitive
74
- writer . WritePrimitive ( node ) ;
74
+ writer . WritePrimitive ( node . AsValue ( ) ) ;
75
75
break ;
76
76
case JsonValueKind . True or JsonValueKind . False : // Primitive
77
- writer . WritePrimitive ( node ) ;
77
+ writer . WritePrimitive ( node . AsValue ( ) ) ;
78
78
break ;
79
79
case JsonValueKind . Null : // null
80
80
writer . WriteNull ( ) ;
@@ -109,72 +109,33 @@ private static void WriteObject(this IOpenApiWriter writer, JsonObject entity)
109
109
writer . WriteEndObject ( ) ;
110
110
}
111
111
112
- private static void WritePrimitive ( this IOpenApiWriter writer , JsonNode primitive )
112
+ private static void WritePrimitive ( this IOpenApiWriter writer , JsonValue jsonValue )
113
113
{
114
- Utils . CheckArgumentNull ( writer ) ;
115
-
116
- var valueKind = primitive . GetValueKind ( ) ;
117
-
118
- if ( valueKind == JsonValueKind . String && primitive is JsonValue jsonStrValue )
119
- {
120
- if ( jsonStrValue . TryGetValue < DateTimeOffset > ( out var dto ) )
121
- {
122
- writer . WriteValue ( dto ) ;
123
- }
124
- else if ( jsonStrValue . TryGetValue < DateTime > ( out var dt ) )
125
- {
126
- writer . WriteValue ( dt ) ;
127
- }
128
- else if ( jsonStrValue . TryGetValue < string > ( out var strValue ) )
129
- {
130
- // check whether string is actual string or date time object
131
- if ( DateTimeOffset . TryParse ( strValue , CultureInfo . InvariantCulture , DateTimeStyles . RoundtripKind , out var dateTimeOffset ) )
132
- {
133
- writer . WriteValue ( dateTimeOffset ) ;
134
- }
135
- else if ( DateTime . TryParse ( strValue , CultureInfo . InvariantCulture , DateTimeStyles . RoundtripKind , out var dateTime ) )
136
- { // order matters, DTO needs to be checked first!!!
137
- writer . WriteValue ( dateTime ) ;
138
- }
139
- else
140
- {
141
- writer . WriteValue ( strValue ) ;
142
- }
143
- }
144
- }
145
-
146
- else if ( valueKind == JsonValueKind . Number && primitive is JsonValue jsonValue )
147
- {
148
-
149
- if ( jsonValue . TryGetValue < decimal > ( out var decimalValue ) )
150
- {
151
- writer . WriteValue ( decimalValue ) ;
152
- }
153
- else if ( jsonValue . TryGetValue < double > ( out var doubleValue ) )
154
- {
155
- writer . WriteValue ( doubleValue ) ;
156
- }
157
- else if ( jsonValue . TryGetValue < float > ( out var floatValue ) )
158
- {
159
- writer . WriteValue ( floatValue ) ;
160
- }
161
- else if ( jsonValue . TryGetValue < long > ( out var longValue ) )
162
- {
163
- writer . WriteValue ( longValue ) ;
164
- }
165
- else if ( jsonValue . TryGetValue < int > ( out var intValue ) )
166
- {
167
- writer . WriteValue ( intValue ) ;
168
- }
169
- }
170
- else if ( valueKind is JsonValueKind . False )
171
- {
172
- writer . WriteValue ( false ) ;
173
- }
174
- else if ( valueKind is JsonValueKind . True )
175
- {
176
- writer . WriteValue ( true ) ;
177
- }
114
+ if ( jsonValue . TryGetValue ( out string stringValue ) )
115
+ writer . WriteValue ( stringValue ) ;
116
+ else if ( jsonValue . TryGetValue ( out DateTime dateTimeValue ) )
117
+ writer . WriteValue ( dateTimeValue . ToString ( "o" , CultureInfo . InvariantCulture ) ) ; // ISO 8601 format
118
+ else if ( jsonValue . TryGetValue ( out DateTimeOffset dateTimeOffsetValue ) )
119
+ writer . WriteValue ( dateTimeOffsetValue . ToString ( "o" , CultureInfo . InvariantCulture ) ) ;
120
+ #if NET6_0_OR_GREATER
121
+ else if ( jsonValue . TryGetValue ( out DateOnly dateOnlyValue ) )
122
+ writer . WriteValue ( dateOnlyValue . ToString ( "o" , CultureInfo . InvariantCulture ) ) ;
123
+ else if ( jsonValue . TryGetValue ( out TimeOnly timeOnlyValue ) )
124
+ writer . WriteValue ( timeOnlyValue . ToString ( "o" , CultureInfo . InvariantCulture ) ) ;
125
+ #endif
126
+ else if ( jsonValue . TryGetValue ( out bool boolValue ) )
127
+ writer . WriteValue ( boolValue ) ;
128
+ // write number values
129
+ else if ( jsonValue . TryGetValue ( out decimal decimalValue ) )
130
+ writer . WriteValue ( decimalValue ) ;
131
+ else if ( jsonValue . TryGetValue ( out double doubleValue ) )
132
+ writer . WriteValue ( doubleValue ) ;
133
+ else if ( jsonValue . TryGetValue ( out float floatValue ) )
134
+ writer . WriteValue ( floatValue ) ;
135
+ else if ( jsonValue . TryGetValue ( out long longValue ) )
136
+ writer . WriteValue ( longValue ) ;
137
+ else if ( jsonValue . TryGetValue ( out int intValue ) )
138
+ writer . WriteValue ( intValue ) ;
178
139
}
179
140
}
180
141
}
0 commit comments