Quick answer: Unity IL2CPP player throwing MissingMethodException for code that exists in source? Managed stripping at High strips reflectively-called methods. Add a link.xml or [Preserve] to keep them.
Editor and Mono builds work fine, but the IL2CPP build crashes on a JSON deserializer with MissingMethodException. The stripper removed the parameterless constructor.
Add a link.xml
<linker>
<assembly fullname="Newtonsoft.Json" preserve="all"/>
</linker>Place at Assets/link.xml. Anything reached through reflection - JSON converters, attribute targets, generic instantiations - must be in this file or the IL2CPP stripper will discard it as unreferenced.
Or annotate types
For first-party code, decorate types with [UnityEngine.Scripting.Preserve]. It keeps the metadata even when nothing in the static call graph reaches the method.
Lower the strip level
If you can't enumerate every reflective entry, set Managed Stripping Level to Minimal. You give up some binary size but eliminate this class of post-build crash.
“Stripping is right by default - so when it's wrong, it's wrong everywhere at once.”
Add a smoke test that boots the IL2CPP build in CI and runs your serialization round-trip; stripper regressions surface late otherwise.