Skip to content

chore: Fix trimmer warnings in Uno.Extensions.Serialization - #2995

Closed
jonpryor wants to merge 1 commit into
mainfrom
dev/jonpryor/jonp-Serialization-AotCompatible
Closed

chore: Fix trimmer warnings in Uno.Extensions.Serialization#2995
jonpryor wants to merge 1 commit into
mainfrom
dev/jonpryor/jonp-Serialization-AotCompatible

Conversation

@jonpryor

Copy link
Copy Markdown
Contributor

Enable $(IsAotCompatible)=true for the following projects:

  • src/Uno.Extensions.Serialization/Uno.Extensions.Serialization.csproj

Address the following warnings:

src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToString(Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToString(Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(88,16): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToString(Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToString(Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(107,17): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromString(String, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromString(String, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromString(String, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromString(String, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(43,17): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromStream(Stream, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromStream(Stream, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(62,14): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(146,10): error IL2026:
  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
  From JsonDeserializer: 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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(157,10): error IL2026:
  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToString(Object, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
  From JsonDeserializer: 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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(140,10): error IL2026:
  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromString(String, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
  From JsonDeserializer: 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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(168,3): error IL2026:
  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
  From JsonDeserializer: 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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(46,89): error IL3050:
  Using member 'System.Text.Json.JsonSerializer.Deserialize(Stream, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
  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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(71,4): error IL3050:
  Using member 'System.Text.Json.JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
  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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(91,85): error IL3050:
  Using member 'System.Text.Json.JsonSerializer.Serialize(Object, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
  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.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(110,89): error IL3050:
  Using member 'System.Text.Json.JsonSerializer.Deserialize(String, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
  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.

Add [RequiresDynamicCode] and/or [RequiresUnreferencedCode].

Note: updating SystemTextJsonSerializer and
SystemTextJsonSerializer<T> to have [RequiresDynamicCode] and [RequiresUnreferencedCode] on the methods implementing ISerializer and ISerializer<T> results in warnings such as:

src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(127,14): error IL2046:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(131,14): error IL3051:
  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresDynamicCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresDynamicCodeAttribute'.
  'RequiresDynamicCodeAttribute' annotations must match across all interface implementations or overrides.

The problem here is philosophical: while SystemTextJsonSerializer and SystemTextJsonSerializer<T> use JsonSerializer codepaths which are annotated with [RequiresDynamicCode] and
[RequiresUnreferencedCode], that doesn't mean that all ISerializer implementations should have this restriction/requirement.

Use [UnconditionalSuppressMessage] to suppress the IL2046 and IL3051 warnings, so that we don't need to update the ISerializer interface.

GitHub Issue (If applicable): closes #

PR Type

What kind of change does this PR introduce?

What is the current behavior?

What is the new behavior?

PR Checklist

Please check if your PR fulfills the following requirements:

  • Tested code with current supported SDKs
  • Docs have been added/updated which fit documentation template. (for bug fixes / features)
  • Unit Tests and/or UI Tests for the changes have been added (for bug fixes / features) (if applicable)
  • Wasm UI Tests are not showing unexpected any differences. Validate PR Screenshots Compare Test Run results.
  • Contains NO breaking changes
  • Updated the Release Notes
  • Associated with an issue (GitHub or internal)

Other information

Internal Issue (If applicable):

Enable `$(IsAotCompatible)`=true for the following projects:

  * `src/Uno.Extensions.Serialization/Uno.Extensions.Serialization.csproj`

Address the following warnings:

	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToString(Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToString(Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(88,16): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToString(Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToString(Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(107,17): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromString(String, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromString(String, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromString(String, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromString(String, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(43,17): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromStream(Stream, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.FromStream(Stream, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(62,14): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(120,14): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(146,10): error IL2026:
	  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
	  From JsonDeserializer: 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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(157,10): error IL2026:
	  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToString(Object, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
	  From JsonDeserializer: 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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(140,10): error IL2026:
	  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.FromString(String, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
	  From JsonDeserializer: 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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(168,3): error IL2026:
	  Using member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
	  From JsonDeserializer: 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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(46,89): error IL3050:
	  Using member 'System.Text.Json.JsonSerializer.Deserialize(Stream, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
	  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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(71,4): error IL3050:
	  Using member 'System.Text.Json.JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
	  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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(91,85): error IL3050:
	  Using member 'System.Text.Json.JsonSerializer.Serialize(Object, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
	  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.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(110,89): error IL3050:
	  Using member 'System.Text.Json.JsonSerializer.Deserialize(String, Type, JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling.
	  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.

Add `[RequiresDynamicCode]` and/or `[RequiresUnreferencedCode]`.

Note: updating `SystemTextJsonSerializer` and
`SystemTextJsonSerializer<T>` to have `[RequiresDynamicCode]` and
`[RequiresUnreferencedCode]` on the methods implementing `ISerializer`
and `ISerializer<T>` results in warnings such as:

	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(127,14): error IL2046:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresUnreferencedCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresUnreferencedCodeAttribute'.
	  'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
	src/Uno.Extensions.Serialization/SystemTextJsonSerializer.cs(131,14): error IL3051:
	  Member 'Uno.Extensions.Serialization.SystemTextJsonSerializer.ToStream(Stream, Object, Type)' with 'RequiresDynamicCodeAttribute' implements interface member 'Uno.Extensions.Serialization.ISerializer.ToStream(Stream, Object, Type)' without 'RequiresDynamicCodeAttribute'.
	  'RequiresDynamicCodeAttribute' annotations must match across all interface implementations or overrides.

The problem here is philosophical: while `SystemTextJsonSerializer`
and `SystemTextJsonSerializer<T>` use `JsonSerializer` codepaths which
are annotated with `[RequiresDynamicCode]` and
`[RequiresUnreferencedCode]`, that doesn't mean that *all*
`ISerializer` implementations should have this restriction/requirement.

Use `[UnconditionalSuppressMessage]` to suppress the IL2046 and IL3051
warnings, so that we don't need to update the `ISerializer` interface.
@jonpryor

Copy link
Copy Markdown
Contributor Author

Superseded by #2996.

@jonpryor jonpryor closed this Jan 2, 2026
auto-merge was automatically disabled January 2, 2026 19:09

Pull request was closed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant