@@ -52,7 +52,7 @@ public static void WriteAny(this IOpenApiWriter writer, JsonNode node)
52
52
return ;
53
53
}
54
54
55
- JsonElement element = JsonSerializer . Deserialize < JsonElement > ( node ) ;
55
+ var element = JsonDocument . Parse ( node . ToJsonString ( ) ) . RootElement ;
56
56
switch ( element . ValueKind )
57
57
{
58
58
case JsonValueKind . Array : // Array
@@ -62,16 +62,13 @@ public static void WriteAny(this IOpenApiWriter writer, JsonNode node)
62
62
writer . WriteObject ( node as JsonObject ) ;
63
63
break ;
64
64
case JsonValueKind . String : // Primitive
65
- writer . WritePrimitive ( node as JsonValue ) ;
65
+ writer . WritePrimitive ( element ) ;
66
66
break ;
67
67
case JsonValueKind . Number : // Primitive
68
- writer . WritePrimitive ( node as JsonValue ) ;
68
+ writer . WritePrimitive ( element ) ;
69
69
break ;
70
- case JsonValueKind . True : // Primitive
71
- writer . WritePrimitive ( node as JsonValue ) ;
72
- break ;
73
- case JsonValueKind . False : // Primitive
74
- writer . WritePrimitive ( node as JsonValue ) ;
70
+ case JsonValueKind . True or JsonValueKind . False : // Primitive
71
+ writer . WritePrimitive ( element ) ;
75
72
break ;
76
73
case JsonValueKind . Null : // null
77
74
writer . WriteNull ( ) ;
@@ -126,22 +123,53 @@ private static void WriteObject(this IOpenApiWriter writer, JsonObject entity)
126
123
writer . WriteEndObject ( ) ;
127
124
}
128
125
129
- private static void WritePrimitive ( this IOpenApiWriter writer , JsonValue primitive )
126
+ private static void WritePrimitive ( this IOpenApiWriter writer , JsonElement primitive )
130
127
{
131
128
if ( writer == null )
132
129
{
133
130
throw Error . ArgumentNull ( nameof ( writer ) ) ;
134
131
}
135
132
136
- if ( primitive == null )
133
+ if ( primitive . ValueKind == JsonValueKind . String )
137
134
{
138
- throw Error . ArgumentNull ( nameof ( primitive ) ) ;
135
+ // check whether string is actual string or date time object
136
+ if ( primitive . TryGetDateTime ( out var dateTime ) )
137
+ {
138
+ writer . WriteValue ( dateTime ) ;
139
+ }
140
+ else if ( primitive . TryGetDateTimeOffset ( out var dateTimeOffset ) )
141
+ {
142
+ writer . WriteValue ( dateTimeOffset ) ;
143
+ }
144
+ else
145
+ {
146
+ writer . WriteValue ( primitive . GetString ( ) ) ;
147
+ }
139
148
}
140
149
141
- writer . WriteAny ( primitive ) ;
142
-
143
- // The Spec version is meaning for the Any type, so it's ok to use the latest one.
144
- //primitive.Write(writer, OpenApiSpecVersion.OpenApi3_0);
150
+ if ( primitive . ValueKind == JsonValueKind . Number )
151
+ {
152
+ if ( primitive . TryGetDecimal ( out var decimalValue ) )
153
+ {
154
+ writer . WriteValue ( decimalValue ) ;
155
+ }
156
+ else if ( primitive . TryGetDouble ( out var doubleValue ) )
157
+ {
158
+ writer . WriteValue ( doubleValue ) ;
159
+ }
160
+ else if ( primitive . TryGetInt64 ( out var longValue ) )
161
+ {
162
+ writer . WriteValue ( longValue ) ;
163
+ }
164
+ else if ( primitive . TryGetInt32 ( out var intValue ) )
165
+ {
166
+ writer . WriteValue ( intValue ) ;
167
+ }
168
+ }
169
+ if ( primitive . ValueKind is JsonValueKind . True or JsonValueKind . False )
170
+ {
171
+ writer . WriteValue ( primitive . GetBoolean ( ) ) ;
172
+ }
145
173
}
146
174
}
147
175
}
0 commit comments