diff --git a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/RequiresDynamicCodeAttribute.cs b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/RequiresDynamicCodeAttribute.cs
index 157b06404580dd..e2df463a043eb0 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/RequiresDynamicCodeAttribute.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/RequiresDynamicCodeAttribute.cs
@@ -11,7 +11,12 @@ namespace System.Diagnostics.CodeAnalysis
/// This allows tools to understand which methods are unsafe to call when compiling ahead of time.
///
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class, Inherited = false)]
- public sealed class RequiresDynamicCodeAttribute : Attribute
+#if SYSTEM_PRIVATE_CORELIB
+ public
+#else
+ internal
+#endif
+ sealed class RequiresDynamicCodeAttribute : Attribute
{
///
/// Initializes a new instance of the class
diff --git a/src/libraries/System.Text.Json/ref/System.Text.Json.cs b/src/libraries/System.Text.Json/ref/System.Text.Json.cs
index 6dd9befb4893ce..6a188599ee3ae4 100644
--- a/src/libraries/System.Text.Json/ref/System.Text.Json.cs
+++ b/src/libraries/System.Text.Json/ref/System.Text.Json.cs
@@ -187,107 +187,142 @@ public partial struct JsonReaderState
public static partial class JsonSerializer
{
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize(System.IO.Stream utf8Json, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize(System.IO.Stream utf8Json, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize(System.ReadOnlySpan utf8Json, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize(System.ReadOnlySpan utf8Json, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize([System.Diagnostics.CodeAnalysis.StringSyntaxAttribute("Json")] System.ReadOnlySpan json, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize([System.Diagnostics.CodeAnalysis.StringSyntaxAttribute("Json")] System.ReadOnlySpan json, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize([System.Diagnostics.CodeAnalysis.StringSyntaxAttribute("Json")] string json, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize([System.Diagnostics.CodeAnalysis.StringSyntaxAttribute("Json")] string json, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize(this System.Text.Json.JsonDocument document, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize(this System.Text.Json.JsonDocument document, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize(this System.Text.Json.JsonElement element, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize(this System.Text.Json.JsonElement element, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize(this System.Text.Json.Nodes.JsonNode? node, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize(this System.Text.Json.Nodes.JsonNode? node, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static object? Deserialize(ref System.Text.Json.Utf8JsonReader reader, System.Type returnType, System.Text.Json.JsonSerializerOptions? options = null) { throw null; }
public static object? Deserialize(ref System.Text.Json.Utf8JsonReader reader, System.Type returnType, System.Text.Json.Serialization.JsonSerializerContext context) { throw null; }
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
public static System.Threading.Tasks.ValueTask
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
internal virtual void ConfigureJsonTypeInfoUsingReflection(JsonTypeInfo jsonTypeInfo, JsonSerializerOptions options) { }
}
}
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Helpers.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Helpers.cs
index 71686187483625..7e56f52f29ab99 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Helpers.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Helpers.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics;
@@ -11,8 +11,10 @@ namespace System.Text.Json
public static partial class JsonSerializer
{
internal const string SerializationUnreferencedCodeMessage = "JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.";
+ internal const string SerializationRequiresDynamicCodeMessage = "JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.";
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
private static JsonTypeInfo GetTypeInfo(JsonSerializerOptions? options, Type runtimeType)
{
Debug.Assert(runtimeType != null);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Document.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Document.cs
index b6afa9185b16ae..f49d96e04c23d6 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Document.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Document.cs
@@ -27,6 +27,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize(this JsonDocument document, JsonSerializerOptions? options = null)
{
if (document is null)
@@ -56,6 +57,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize(this JsonDocument document, Type returnType, JsonSerializerOptions? options = null)
{
if (document is null)
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Element.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Element.cs
index 5b03983f726885..f9cd108c47dccf 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Element.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Element.cs
@@ -24,6 +24,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize(this JsonElement element, JsonSerializerOptions? options = null)
{
JsonTypeInfo jsonTypeInfo = GetTypeInfo(options, typeof(TValue));
@@ -48,6 +49,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize(this JsonElement element, Type returnType, JsonSerializerOptions? options = null)
{
if (returnType is null)
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Node.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Node.cs
index e15dcf7c32b0c3..08f770349dac80 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Node.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Node.cs
@@ -26,6 +26,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize(this JsonNode? node, JsonSerializerOptions? options = null)
{
JsonTypeInfo jsonTypeInfo = GetTypeInfo(options, typeof(TValue));
@@ -47,6 +48,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize(this JsonNode? node, Type returnType, JsonSerializerOptions? options = null)
{
if (returnType is null)
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Span.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Span.cs
index 414b9033001768..8708f4a92debd9 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Span.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Span.cs
@@ -26,6 +26,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize(ReadOnlySpan utf8Json, JsonSerializerOptions? options = null)
{
JsonTypeInfo jsonTypeInfo = GetTypeInfo(options, typeof(TValue));
@@ -52,6 +53,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize(ReadOnlySpan utf8Json, Type returnType, JsonSerializerOptions? options = null)
{
if (returnType is null)
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Stream.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Stream.cs
index ae5ba364afd47e..7d3fa526bc80ad 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Stream.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Stream.cs
@@ -41,6 +41,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static ValueTask DeserializeAsync(
Stream utf8Json,
JsonSerializerOptions? options = null,
@@ -76,6 +77,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize(
Stream utf8Json,
JsonSerializerOptions? options = null)
@@ -112,6 +114,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static ValueTask DeserializeAsync(
Stream utf8Json,
Type returnType,
@@ -152,6 +155,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize(
Stream utf8Json,
Type returnType,
@@ -353,6 +357,7 @@ public static partial class JsonSerializer
/// is .
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static IAsyncEnumerable DeserializeAsyncEnumerable(
Stream utf8Json,
JsonSerializerOptions? options = null,
@@ -372,6 +377,7 @@ public static partial class JsonSerializer
return CreateAsyncEnumerableDeserializer(utf8Json, options, cancellationToken);
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
static async IAsyncEnumerable CreateAsyncEnumerableDeserializer(
Stream utf8Json,
JsonSerializerOptions options,
@@ -411,6 +417,7 @@ static async IAsyncEnumerable CreateAsyncEnumerableDeserializer(
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode",
Justification = "Workaround for https://github.com/mono/linker/issues/1416. All usages are marked as unsafe.")]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
private static JsonTypeInfo CreateQueueJsonTypeInfo(JsonConverter queueConverter, JsonSerializerOptions queueOptions) =>
new ReflectionJsonTypeInfo>(queueConverter, queueOptions);
@@ -622,6 +629,7 @@ internal static TValue ContinueDeserialize(
}
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
private static TValue? ReadAllUsingOptions(
Stream utf8Json,
Type returnType,
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.String.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.String.cs
index 4aff8fae0f0202..e9bb1f1069d41a 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.String.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.String.cs
@@ -42,6 +42,7 @@ public static partial class JsonSerializer
/// UTF-8 methods since the implementation natively uses UTF-8.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize([StringSyntax(StringSyntaxAttribute.Json)] string json, JsonSerializerOptions? options = null)
{
if (json is null)
@@ -78,6 +79,7 @@ public static partial class JsonSerializer
/// UTF-8 methods since the implementation natively uses UTF-8.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize([StringSyntax(StringSyntaxAttribute.Json)] ReadOnlySpan json, JsonSerializerOptions? options = null)
{
// default/null span is treated as empty
@@ -114,6 +116,7 @@ public static partial class JsonSerializer
/// UTF-8 methods since the implementation natively uses UTF-8.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize([StringSyntax(StringSyntaxAttribute.Json)] string json, Type returnType, JsonSerializerOptions? options = null)
{
if (json is null)
@@ -157,6 +160,7 @@ public static partial class JsonSerializer
/// UTF-8 methods since the implementation natively uses UTF-8.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize([StringSyntax(StringSyntaxAttribute.Json)] ReadOnlySpan json, Type returnType, JsonSerializerOptions? options = null)
{
if (returnType is null)
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Utf8JsonReader.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Utf8JsonReader.cs
index 5e5697cde4605b..d98fd97672bdb4 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Utf8JsonReader.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.Utf8JsonReader.cs
@@ -55,6 +55,7 @@ public static partial class JsonSerializer
///
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static TValue? Deserialize(ref Utf8JsonReader reader, JsonSerializerOptions? options = null)
{
JsonTypeInfo jsonTypeInfo = GetTypeInfo(options, typeof(TValue));
@@ -107,6 +108,7 @@ public static partial class JsonSerializer
///
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static object? Deserialize(ref Utf8JsonReader reader, Type returnType, JsonSerializerOptions? options = null)
{
if (returnType is null)
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.ByteArray.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.ByteArray.cs
index 532a00349b3cfe..dda1088e7acf99 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.ByteArray.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.ByteArray.cs
@@ -20,6 +20,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static byte[] SerializeToUtf8Bytes(
TValue value,
JsonSerializerOptions? options = null)
@@ -47,6 +48,7 @@ public static byte[] SerializeToUtf8Bytes(
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static byte[] SerializeToUtf8Bytes(
object? value,
Type inputType,
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Document.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Document.cs
index 2be92327890a4f..731dd0b46cb4a0 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Document.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Document.cs
@@ -22,6 +22,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static JsonDocument SerializeToDocument(TValue value, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeType(value);
@@ -47,6 +48,7 @@ public static JsonDocument SerializeToDocument(TValue value, JsonSeriali
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static JsonDocument SerializeToDocument(object? value, Type inputType, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeTypeAndValidateInputType(value, inputType);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Element.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Element.cs
index 0aeb8bbf84b451..3343f544a1c11f 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Element.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Element.cs
@@ -22,6 +22,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static JsonElement SerializeToElement(TValue value, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeType(value);
@@ -47,6 +48,7 @@ public static JsonElement SerializeToElement(TValue value, JsonSerialize
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static JsonElement SerializeToElement(object? value, Type inputType, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeTypeAndValidateInputType(value, inputType);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Node.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Node.cs
index 2360c4618794ff..3676bc1c4afe76 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Node.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Node.cs
@@ -23,6 +23,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static JsonNode? SerializeToNode(TValue value, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeType(value);
@@ -48,6 +49,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static JsonNode? SerializeToNode(object? value, Type inputType, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeTypeAndValidateInputType(value, inputType);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Stream.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Stream.cs
index 3ddc473800d09e..9fb7c5c8394218 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Stream.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Stream.cs
@@ -38,6 +38,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static Task SerializeAsync(
Stream utf8Json,
TValue value,
@@ -69,6 +70,7 @@ public static Task SerializeAsync(
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static void Serialize(
Stream utf8Json,
TValue value,
@@ -104,6 +106,7 @@ public static void Serialize(
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static Task SerializeAsync(
Stream utf8Json,
object? value,
@@ -139,6 +142,7 @@ public static Task SerializeAsync(
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static void Serialize(
Stream utf8Json,
object? value,
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.String.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.String.cs
index a63fb0566251aa..674a3063956c70 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.String.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.String.cs
@@ -25,6 +25,7 @@ public static partial class JsonSerializer
/// and .
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static string Serialize(TValue value, JsonSerializerOptions? options = null)
{
Type runtimeType = GetRuntimeType(value);
@@ -54,6 +55,7 @@ public static string Serialize(TValue value, JsonSerializerOptions? opti
/// and .
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static string Serialize(
object? value,
Type inputType,
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Utf8JsonWriter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Utf8JsonWriter.cs
index bdd50066c0e647..7f27dcdd50a2eb 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Utf8JsonWriter.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Write.Utf8JsonWriter.cs
@@ -24,6 +24,7 @@ public static partial class JsonSerializer
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static void Serialize(
Utf8JsonWriter writer,
TValue value,
@@ -57,6 +58,7 @@ public static void Serialize(
/// for or its serializable members.
///
[RequiresUnreferencedCode(SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(SerializationRequiresDynamicCodeMessage)]
public static void Serialize(
Utf8JsonWriter writer,
object? value,
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs
index 91b7d7433214b4..58e81d7afe7504 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs
@@ -29,6 +29,7 @@ public sealed partial class JsonSerializerOptions
private static Func? s_typeInfoCreationFunc;
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
private static void RootReflectionSerializerDependencies()
{
// s_typeInfoCreationFunc is the last field assigned.
@@ -42,6 +43,7 @@ private static void RootReflectionSerializerDependencies()
}
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
static JsonTypeInfo CreateJsonTypeInfo(Type type, JsonSerializerOptions options)
{
JsonTypeInfo.ValidateType(type, null, null, options);
@@ -66,12 +68,14 @@ static JsonTypeInfo CreateJsonTypeInfo(Type type, JsonSerializerOptions options)
}
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
private JsonTypeInfo CreateReflectionJsonTypeInfo()
{
return new ReflectionJsonTypeInfo(this);
}
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
private static JsonConverter[] GetDefaultFactoryConverters()
{
return new JsonConverter[]
@@ -212,6 +216,7 @@ internal JsonConverter GetConverterFromMember(Type? parentClassType, Type proper
/// for or its serializable members.
///
[RequiresUnreferencedCode("Getting a converter for a type may require reflection which depends on unreferenced code.")]
+ [RequiresDynamicCode("Getting a converter for a type may require reflection which depends on runtime code generation.")]
public JsonConverter GetConverter(Type typeToConvert)
{
if (typeToConvert is null)
@@ -318,6 +323,9 @@ private JsonConverter GetConverterFromType(Type typeToConvert)
return converter;
}
+ // This suppression needs to be removed. https://github.com/dotnet/runtime/issues/68878
+ [UnconditionalSuppressMessage("AotAnalysis", "IL3050:RequiresDynamicCode", Justification = "The factory constructors are only invoked in the context of reflection serialization code paths " +
+ "and are marked RequiresDynamicCode")]
private JsonConverter GetConverterFromAttribute(JsonConverterAttribute converterAttribute, Type typeToConvert, Type classTypeAttributeIsOn, MemberInfo? memberInfo)
{
JsonConverter? converter;
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.cs
index 32e3d2b2a29885..e444cc9c27b07e 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.cs
@@ -571,7 +571,9 @@ internal JsonSerializerContext? JsonSerializerContext
// The cached value used to determine if ReferenceHandler should use Preserve or IgnoreCycles semanitcs or None of them.
internal ReferenceHandlingStrategy ReferenceHandlingStrategy = ReferenceHandlingStrategy.None;
-
+ // Workaround https://github.com/dotnet/linker/issues/2715
+ [UnconditionalSuppressMessage("AotAnalysis", "IL3050:RequiresDynamicCode",
+ Justification = "Dynamic path is guarded by the runtime feature switch.")]
internal MemberAccessor MemberAccessorStrategy
{
get
@@ -604,6 +606,7 @@ internal MemberAccessor MemberAccessorStrategy
/// must be checked before calling.
///
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
internal void InitializeForReflectionSerializer()
{
RootReflectionSerializerDependencies();
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptionsUpdateHandler.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptionsUpdateHandler.cs
index 4fd3c66edae085..8f7f94140f0c48 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptionsUpdateHandler.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptionsUpdateHandler.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Reflection.Metadata;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
@@ -13,6 +14,7 @@ namespace System.Text.Json
/// Handler used to clear JsonSerializerOptions reflection cache upon a metadata update.
internal static class JsonSerializerOptionsUpdateHandler
{
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
public static void ClearCache(Type[]? types)
{
// Ignore the types, and just clear out all reflection caches from serializer options.
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs
index 7d8d161acd0a35..ceed96e37606db 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs
@@ -1,6 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization.Converters;
namespace System.Text.Json.Serialization
@@ -11,6 +12,7 @@ namespace System.Text.Json.Serialization
///
/// Reading is case insensitive, writing can be customized via a .
///
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
public class JsonStringEnumConverter : JsonConverterFactory
{
private readonly JsonNamingPolicy? _namingPolicy;
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/FSharpCoreReflectionProxy.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/FSharpCoreReflectionProxy.cs
index 6962bd011d9263..e0bd83a0c1c9bf 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/FSharpCoreReflectionProxy.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/FSharpCoreReflectionProxy.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Generic;
@@ -61,6 +61,7 @@ public enum FSharpKind
/// If true, also initializes the proxy singleton for future by other F# types.
///
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public static bool IsFSharpType(Type type)
{
if (s_singletonInstance is null)
@@ -92,6 +93,7 @@ public static FSharpCoreReflectionProxy Instance
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
private FSharpCoreReflectionProxy(Assembly fsharpCoreAssembly)
{
Debug.Assert(fsharpCoreAssembly.GetName().Name == "FSharp.Core");
@@ -112,6 +114,7 @@ private FSharpCoreReflectionProxy(Assembly fsharpCoreAssembly)
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public FSharpKind DetectFSharpKind(Type type)
{
Attribute? compilationMappingAttribute = GetFSharpCompilationMappingAttribute(type);
@@ -140,6 +143,7 @@ public FSharpKind DetectFSharpKind(Type type)
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public Func CreateFSharpOptionValueGetter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] TFSharpOption, T>()
{
Debug.Assert(typeof(TFSharpOption).GetGenericTypeDefinition() == _fsharpOptionType);
@@ -148,6 +152,7 @@ public FSharpKind DetectFSharpKind(Type type)
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public Func CreateFSharpOptionSomeConstructor<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] TFSharpOption, TElement>()
{
Debug.Assert(typeof(TFSharpOption).GetGenericTypeDefinition() == _fsharpOptionType);
@@ -156,6 +161,7 @@ public FSharpKind DetectFSharpKind(Type type)
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public StructGetter CreateFSharpValueOptionValueGetter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] TFSharpValueOption, TElement>()
where TFSharpValueOption : struct
{
@@ -165,6 +171,7 @@ public FSharpKind DetectFSharpKind(Type type)
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public Func CreateFSharpValueOptionSomeConstructor<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] TFSharpOption, TElement>()
{
Debug.Assert(typeof(TFSharpOption).GetGenericTypeDefinition() == _fsharpValueOptionType);
@@ -173,6 +180,7 @@ public FSharpKind DetectFSharpKind(Type type)
}
[RequiresUnreferencedCode(FSharpCoreUnreferencedCodeMessage)]
+ [RequiresDynamicCode(FSharpCoreUnreferencedCodeMessage)]
public Func, TFSharpList> CreateFSharpListConstructor()
{
Debug.Assert(typeof(TFSharpList).GetGenericTypeDefinition() == _fsharpListType);
@@ -180,6 +188,7 @@ public Func, TFSharpList> CreateFSharpListConstructor, TFSharpSet> CreateFSharpSetConstructor()
{
Debug.Assert(typeof(TFSharpSet).GetGenericTypeDefinition() == _fsharpSetType);
@@ -187,6 +196,7 @@ public Func, TFSharpSet> CreateFSharpSetConstructor>, TFSharpMap> CreateFSharpMapConstructor()
{
Debug.Assert(typeof(TFSharpMap).GetGenericTypeDefinition() == _fsharpMapType);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/MemberAccessor.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/MemberAccessor.cs
index f01fc5d7493333..9e3fb51b284980 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/MemberAccessor.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/MemberAccessor.cs
@@ -20,9 +20,11 @@ public abstract JsonTypeInfo.ParameterizedConstructorDelegate CreateAddMethodDelegate<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] TCollection>();
[RequiresUnreferencedCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
+ [RequiresDynamicCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
public abstract Func, TCollection> CreateImmutableEnumerableCreateRangeDelegate();
[RequiresUnreferencedCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
+ [RequiresDynamicCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
public abstract Func>, TCollection> CreateImmutableDictionaryCreateRangeDelegate();
public abstract Func CreatePropertyGetter(PropertyInfo propertyInfo);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitCachingMemberAccessor.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitCachingMemberAccessor.cs
index f45bb72f4610a0..d35e6e9e2cdaeb 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitCachingMemberAccessor.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitCachingMemberAccessor.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#if NETFRAMEWORK || NETCOREAPP
@@ -8,6 +8,7 @@
namespace System.Text.Json.Serialization.Metadata
{
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
internal sealed partial class ReflectionEmitCachingMemberAccessor : MemberAccessor
{
private static readonly ReflectionEmitMemberAccessor s_sourceAccessor = new();
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitMemberAccessor.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitMemberAccessor.cs
index 0827931b5df1de..6a6f612363f6dc 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitMemberAccessor.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionEmitMemberAccessor.cs
@@ -10,6 +10,7 @@
namespace System.Text.Json.Serialization.Metadata
{
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
internal sealed class ReflectionEmitMemberAccessor : MemberAccessor
{
public override JsonTypeInfo.ConstructorDelegate? CreateConstructor(
@@ -178,6 +179,7 @@ private static DynamicMethod CreateAddMethodDelegate(
}
[RequiresUnreferencedCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
+ [RequiresDynamicCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
public override Func, TCollection> CreateImmutableEnumerableCreateRangeDelegate() =>
CreateDelegate, TCollection>>(
CreateImmutableEnumerableCreateRangeDelegate(typeof(TCollection), typeof(TElement), typeof(IEnumerable)));
@@ -204,6 +206,7 @@ private static DynamicMethod CreateImmutableEnumerableCreateRangeDelegate(Type c
}
[RequiresUnreferencedCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
+ [RequiresDynamicCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
public override Func>, TCollection> CreateImmutableDictionaryCreateRangeDelegate() =>
CreateDelegate>, TCollection>>(
CreateImmutableDictionaryCreateRangeDelegate(typeof(TCollection), typeof(TKey), typeof(TValue), typeof(IEnumerable>)));
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionJsonTypeInfoOfT.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionJsonTypeInfoOfT.cs
index 09ab7932f8ee82..43d18ae473c6ae 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionJsonTypeInfoOfT.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionJsonTypeInfoOfT.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Generic;
@@ -16,6 +16,7 @@ namespace System.Text.Json.Serialization.Metadata
internal sealed class ReflectionJsonTypeInfo : JsonTypeInfo
{
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
internal ReflectionJsonTypeInfo(JsonSerializerOptions options)
: this(
GetConverter(
@@ -28,6 +29,7 @@ internal ReflectionJsonTypeInfo(JsonSerializerOptions options)
}
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
internal ReflectionJsonTypeInfo(JsonConverter converter, JsonSerializerOptions options)
: base(converter, options)
{
@@ -42,7 +44,9 @@ internal ReflectionJsonTypeInfo(JsonConverter converter, JsonSerializerOptions o
}
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode",
- Justification = "Constructor is marked as RequiresUnreferencedCode")]
+ Justification = "The ctor is marked as RequiresUnreferencedCode")]
+ [UnconditionalSuppressMessage("AotAnalysis", "IL3050:RequiresDynamicCode",
+ Justification = "The ctor is marked RequiresDynamicCode.")]
internal override void Configure()
{
base.Configure();
@@ -50,6 +54,7 @@ internal override void Configure()
}
[RequiresUnreferencedCode(JsonSerializer.SerializationUnreferencedCodeMessage)]
+ [RequiresDynamicCode(JsonSerializer.SerializationRequiresDynamicCodeMessage)]
private void AddPropertiesAndParametersUsingReflection()
{
Debug.Assert(PropertyInfoForTypeInfo.ConverterStrategy == ConverterStrategy.Object);
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionMemberAccessor.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionMemberAccessor.cs
index f3d182350838dc..41527aa309366b 100644
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionMemberAccessor.cs
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/ReflectionMemberAccessor.cs
@@ -137,6 +137,7 @@ public override JsonTypeInfo.ParameterizedConstructorDelegate, TCollection> CreateImmutableEnumerableCreateRangeDelegate()
{
MethodInfo createRange = typeof(TCollection).GetImmutableEnumerableCreateRangeMethod(typeof(TElement));
@@ -145,6 +146,7 @@ public override Func, TCollection> CreateImmutableEnumerab
}
[RequiresUnreferencedCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
+ [RequiresDynamicCode(IEnumerableConverterFactoryHelpers.ImmutableConvertersUnreferencedCodeMessage)]
public override Func>, TCollection> CreateImmutableDictionaryCreateRangeDelegate()
{
MethodInfo createRange = typeof(TCollection).GetImmutableDictionaryCreateRangeMethod(typeof(TKey), typeof(TValue));