diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientJsonSerializerContext.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientJsonSerializerContext.cs
new file mode 100644
index 0000000000..546595c7aa
--- /dev/null
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientJsonSerializerContext.cs
@@ -0,0 +1,20 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+namespace Microsoft.Data.SqlClient;
+
+///
+/// Source-generated JSON metadata. Each [JsonSerializable] type gets a property named after its CLR type:
+/// float[] -> SingleArray, ReadOnlyMemory<float> -> ReadOnlyMemorySingle, List<byte> -> ListByte.
+///
+[JsonSerializable(typeof(float[]))]
+[JsonSerializable(typeof(ReadOnlyMemory))]
+[JsonSerializable(typeof(List))]
+internal sealed partial class SqlClientJsonSerializerContext : JsonSerializerContext
+{
+}
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlParameter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlParameter.cs
index f9e342d4c6..b0fc3fd911 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlParameter.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlParameter.cs
@@ -2389,7 +2389,7 @@ internal static object CoerceValue(object value, MetaType destinationType, out b
{
try
{
- value = ((ISqlVector)new SqlVector(JsonSerializer.Deserialize((string)value))).VectorPayload;
+ value = ((ISqlVector)new SqlVector(JsonSerializer.Deserialize((string)value, SqlClientJsonSerializerContext.Default.SingleArray))).VectorPayload;
}
catch (Exception ex) when (ex is ArgumentNullException || ex is JsonException)
{
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/VirtualSecureModeEnclaveProvider.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/VirtualSecureModeEnclaveProvider.cs
index aa7e17be03..695951f965 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/VirtualSecureModeEnclaveProvider.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/VirtualSecureModeEnclaveProvider.cs
@@ -72,7 +72,7 @@ protected override byte[] MakeRequest(string url)
using (Stream stream = s_client.GetStreamAsync(url).ConfigureAwait(false).GetAwaiter().GetResult())
{
- return JsonSerializer.Deserialize>(stream)?.ToArray();
+ return JsonSerializer.Deserialize(stream, SqlClientJsonSerializerContext.Default.ListByte)?.ToArray();
}
}
catch (Exception e)
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlTypes/SqlVector.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlTypes/SqlVector.cs
index d87a539c37..ce16e5b445 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlTypes/SqlVector.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlTypes/SqlVector.cs
@@ -97,7 +97,8 @@ internal string GetString()
{
return SQLMessage.NullString();
}
- return JsonSerializer.Serialize(Memory);
+ // GetTypeFieldsOrThrow guarantees T is float.
+ return JsonSerializer.Serialize((ReadOnlyMemory)(object)Memory, SqlClientJsonSerializerContext.Default.ReadOnlyMemorySingle);
}
#endregion