diff --git a/src/libraries/System.Text.Json/src/System.Text.Json.csproj b/src/libraries/System.Text.Json/src/System.Text.Json.csproj
index 2267309134c54..e865ea7500f35 100644
--- a/src/libraries/System.Text.Json/src/System.Text.Json.csproj
+++ b/src/libraries/System.Text.Json/src/System.Text.Json.csproj
@@ -122,6 +122,7 @@ System.Text.Json.Nodes.JsonValue
+
@@ -242,7 +243,7 @@ System.Text.Json.Nodes.JsonValue
-
+
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/JsonMetadataServicesConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/JsonMetadataServicesConverter.cs
index 9a29b32f8c8b6..2b3a9c0d12fbc 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/JsonMetadataServicesConverter.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/JsonMetadataServicesConverter.cs
@@ -50,24 +50,7 @@ public JsonMetadataServicesConverter(Func> converterCreator!!,
}
internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, ref ReadStack state, out T? value)
- {
- JsonTypeInfo jsonTypeInfo = state.Current.JsonTypeInfo;
-
- if (_converterStrategy == ConverterStrategy.Object)
- {
- if (jsonTypeInfo.PropertyCache == null)
- {
- jsonTypeInfo.InitializePropCache();
- }
-
- if (jsonTypeInfo.ParameterCache == null && jsonTypeInfo.IsObjectWithParameterizedCtor)
- {
- jsonTypeInfo.InitializeParameterCache();
- }
- }
-
- return Converter.OnTryRead(ref reader, typeToConvert, options, ref state, out value);
- }
+ => Converter.OnTryRead(ref reader, typeToConvert, options, ref state, out value);
internal override bool OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializerOptions options, ref WriteStack state)
{
@@ -84,11 +67,6 @@ internal override bool OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializer
return true;
}
- if (_converterStrategy == ConverterStrategy.Object && jsonTypeInfo.PropertyCache == null)
- {
- jsonTypeInfo.InitializePropCache();
- }
-
return Converter.OnTryWrite(writer, value, options, ref state);
}
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectDefaultConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectDefaultConverter.cs
index 6894c4a50fb51..bbe8ec34da206 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectDefaultConverter.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectDefaultConverter.cs
@@ -287,7 +287,7 @@ internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert,
{
// Remember the current property for JsonPath support if an exception is thrown.
state.Current.JsonPropertyInfo = jsonPropertyInfo;
- state.Current.NumberHandling = jsonPropertyInfo.NumberHandling;
+ state.Current.NumberHandling = jsonPropertyInfo.EffectiveNumberHandling;
bool success = jsonPropertyInfo.GetMemberAndWriteJson(obj, ref state, writer);
// Converters only return 'false' when out of data which is not possible in fast path.
@@ -303,7 +303,7 @@ internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert,
{
// Remember the current property for JsonPath support if an exception is thrown.
state.Current.JsonPropertyInfo = dataExtensionProperty;
- state.Current.NumberHandling = dataExtensionProperty.NumberHandling;
+ state.Current.NumberHandling = dataExtensionProperty.EffectiveNumberHandling;
bool success = dataExtensionProperty.GetMemberAndWriteJsonExtensionData(obj, ref state, writer);
Debug.Assert(success);
@@ -340,7 +340,7 @@ internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert,
if (jsonPropertyInfo.ShouldSerialize)
{
state.Current.JsonPropertyInfo = jsonPropertyInfo;
- state.Current.NumberHandling = jsonPropertyInfo.NumberHandling;
+ state.Current.NumberHandling = jsonPropertyInfo.EffectiveNumberHandling;
if (!jsonPropertyInfo.GetMemberAndWriteJson(obj!, ref state, writer))
{
@@ -370,7 +370,7 @@ internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert,
{
// Remember the current property for JsonPath support if an exception is thrown.
state.Current.JsonPropertyInfo = dataExtensionProperty;
- state.Current.NumberHandling = dataExtensionProperty.NumberHandling;
+ state.Current.NumberHandling = dataExtensionProperty.EffectiveNumberHandling;
if (!dataExtensionProperty.GetMemberAndWriteJsonExtensionData(obj, ref state, writer))
{
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectWithParameterizedConstructorConverter.Large.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectWithParameterizedConstructorConverter.Large.cs
index f820ffbfe3a85..e9160133e4800 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectWithParameterizedConstructorConverter.Large.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Object/ObjectWithParameterizedConstructorConverter.Large.cs
@@ -52,15 +52,9 @@ protected sealed override void InitializeConstructorArgumentCaches(ref ReadStack
{
JsonTypeInfo typeInfo = state.Current.JsonTypeInfo;
- // Ensure property cache has been initialized.
- Debug.Assert(typeInfo.PropertyCache != null);
+ Debug.Assert(typeInfo.ParameterCache != null);
- if (typeInfo.ParameterCache == null)
- {
- typeInfo.InitializePropCache();
- }
-
- List> cache = typeInfo.ParameterCache!.List;
+ List> cache = typeInfo.ParameterCache.List;
object?[] arguments = ArrayPool