@@ -44,7 +44,51 @@ internal static void SerializeResponsePrompt(ResponsePrompt instance, Utf8JsonWr
44
44
foreach ( var variable in instance . Variables )
45
45
{
46
46
writer . WritePropertyName ( variable . Key ) ;
47
- JsonSerializer . Serialize ( writer , variable . Value , options . Format == "W" ? null : ( JsonSerializerOptions ) null ) ;
47
+ if ( variable . Value is JsonElement element )
48
+ {
49
+ #if NET6_0_OR_GREATER
50
+ writer . WriteRawValue ( element . GetRawText ( ) ) ;
51
+ #else
52
+ using JsonDocument document = JsonDocument . Parse ( element . GetRawText ( ) ) ;
53
+ JsonSerializer . Serialize ( writer , document . RootElement ) ;
54
+ #endif
55
+ }
56
+ else if ( variable . Value != null )
57
+ {
58
+ // Handle primitive types directly
59
+ switch ( variable . Value )
60
+ {
61
+ case string str :
62
+ writer . WriteStringValue ( str ) ;
63
+ break ;
64
+ case int intVal :
65
+ writer . WriteNumberValue ( intVal ) ;
66
+ break ;
67
+ case long longVal :
68
+ writer . WriteNumberValue ( longVal ) ;
69
+ break ;
70
+ case float floatVal :
71
+ writer . WriteNumberValue ( floatVal ) ;
72
+ break ;
73
+ case double doubleVal :
74
+ writer . WriteNumberValue ( doubleVal ) ;
75
+ break ;
76
+ case decimal decimalVal :
77
+ writer . WriteNumberValue ( decimalVal ) ;
78
+ break ;
79
+ case bool boolVal :
80
+ writer . WriteBooleanValue ( boolVal ) ;
81
+ break ;
82
+ default :
83
+ // For other types, write as string value
84
+ writer . WriteStringValue ( variable . Value . ToString ( ) ) ;
85
+ break ;
86
+ }
87
+ }
88
+ else
89
+ {
90
+ writer . WriteNullValue ( ) ;
91
+ }
48
92
}
49
93
writer . WriteEndObject ( ) ;
50
94
}
@@ -77,7 +121,17 @@ internal static ResponsePrompt DeserializeResponsePrompt(JsonElement element, Mo
77
121
{
78
122
foreach ( var variable in property . Value . EnumerateObject ( ) )
79
123
{
80
- variables [ variable . Name ] = JsonSerializer . Deserialize < object > ( variable . Value . GetRawText ( ) ) ;
124
+ // Handle different JSON value types appropriately
125
+ object value = variable . Value . ValueKind switch
126
+ {
127
+ JsonValueKind . String => variable . Value . GetString ( ) ,
128
+ JsonValueKind . Number => variable . Value . TryGetInt32 ( out int intVal ) ? intVal : variable . Value . GetDouble ( ) ,
129
+ JsonValueKind . True => true ,
130
+ JsonValueKind . False => false ,
131
+ JsonValueKind . Null => null ,
132
+ _ => variable . Value . GetRawText ( ) // For objects/arrays, store as raw JSON string
133
+ } ;
134
+ variables [ variable . Name ] = value ;
81
135
}
82
136
}
83
137
}
@@ -86,6 +140,7 @@ internal static ResponsePrompt DeserializeResponsePrompt(JsonElement element, Mo
86
140
result . Id = id ;
87
141
result . Version = version ;
88
142
143
+ // Add variables to the existing dictionary (Variables property is get-only)
89
144
if ( variables . Count > 0 )
90
145
{
91
146
foreach ( var variable in variables )
0 commit comments