@@ -44,7 +44,51 @@ internal static void SerializeResponsePrompt(ResponsePrompt instance, Utf8JsonWr
4444 foreach ( var variable in instance . Variables )
4545 {
4646 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+ }
4892 }
4993 writer . WriteEndObject ( ) ;
5094 }
@@ -77,7 +121,17 @@ internal static ResponsePrompt DeserializeResponsePrompt(JsonElement element, Mo
77121 {
78122 foreach ( var variable in property . Value . EnumerateObject ( ) )
79123 {
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 ;
81135 }
82136 }
83137 }
@@ -86,6 +140,7 @@ internal static ResponsePrompt DeserializeResponsePrompt(JsonElement element, Mo
86140 result . Id = id ;
87141 result . Version = version ;
88142
143+ // Add variables to the existing dictionary (Variables property is get-only)
89144 if ( variables . Count > 0 )
90145 {
91146 foreach ( var variable in variables )
0 commit comments