[PM-27499] Refactor SDK for .NetStandard + Newtonsoft.Json #1368
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🎟️ Tracking
https://community.bitwarden.com/t/request-for-broader-platform-compatibility-for-bitwarden-sdk/90303
📔 Objective
Targeting the Bitwarden SDK for .NET Core (or .NET 6+) creates significant compatibility issues for legacy applications that run on .NET Framework (such as 4.7.2 or 4.8.x). .NET Framework apps cannot directly reference libraries built only for .NET Core/.NET 6+ due to runtime differences, which forces developers to use workarounds.
To make this project compatible with .NET Standard, I had to switch from System.Text.Json to Newtonsoft.Json for JSON serialization. This is because QuickType’s schema generation for System.Text.Json currently outputs code that uses types like DateOnly and TimeOnly, which are not available in .NET Standard (they require .NET 6+). As a result, projects targeting .NET Standard will encounter build errors with System.Text.Json-generated code.
There is an existing feature request on the QuickType repository to address this problem: glideapps/quicktype#2629. The proposal suggests adding configuration options to QuickType so that it can generate C# code compatible with .NET Standard when using System.Text.Json, avoiding unsupported types.
Until that feature is implemented, switching to Newtonsoft.Json is necessary when targeting .NET Standard to ensure compatibility.
⏰ Reminders before review
team
🦮 Reviewer guidelines
:+1:) or similar for great changes:memo:) or ℹ️ (:information_source:) for notes or general info:question:) for questions:thinking:) or 💭 (:thought_balloon:) for more open inquiry that's not quite a confirmedissue and could potentially benefit from discussion
:art:) for suggestions / improvements:x:) or:warning:) for more significant problems or concerns needing attention:seedling:) or ♻️ (:recycle:) for future improvements or indications of technical debt:pick:) for minor or nitpick changes