<PackageReference Include="Newtonsoft.Json" Version="6.0.4" />

ILGeneratorExtensions

static class ILGeneratorExtensions
using System; using System.Reflection; using System.Reflection.Emit; namespace Newtonsoft.Json.Utilities { internal static class ILGeneratorExtensions { public static void PushInstance(this ILGenerator generator, Type type) { generator.Emit(OpCodes.Ldarg_0); if (type.IsValueType()) generator.Emit(OpCodes.Unbox, type); else generator.Emit(OpCodes.Castclass, type); } public static void BoxIfNeeded(this ILGenerator generator, Type type) { if (type.IsValueType()) generator.Emit(OpCodes.Box, type); else generator.Emit(OpCodes.Castclass, type); } public static void UnboxIfNeeded(this ILGenerator generator, Type type) { if (type.IsValueType()) generator.Emit(OpCodes.Unbox_Any, type); else generator.Emit(OpCodes.Castclass, type); } public static void CallMethod(this ILGenerator generator, MethodInfo methodInfo) { if (methodInfo.IsFinal || !methodInfo.IsVirtual) generator.Emit(OpCodes.Call, methodInfo); else generator.Emit(OpCodes.Callvirt, methodInfo); } public static void Return(this ILGenerator generator) { generator.Emit(OpCodes.Ret); } } }