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

JsonDynamicContract

Contract details for a Type used by the JsonSerializer.
using Newtonsoft.Json.Utilities; using System; using System.Dynamic; using System.Runtime.CompilerServices; namespace Newtonsoft.Json.Serialization { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class JsonDynamicContract : JsonContainerContract { private readonly ThreadSafeStore<string, CallSite<Func<CallSite, object, object>>> _callSiteGetters = new ThreadSafeStore<string, CallSite<Func<CallSite, object, object>>>(CreateCallSiteGetter); [System.Runtime.CompilerServices.Nullable(new byte[] { 1, 1, 1, 1, 1, 1, 2, 1 })] private readonly ThreadSafeStore<string, CallSite<Func<CallSite, object, object, object>>> _callSiteSetters = new ThreadSafeStore<string, CallSite<Func<CallSite, object, object, object>>>(CreateCallSiteSetter); public JsonPropertyCollection Properties { get; } [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] [field: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] public Func<string, string> PropertyNameResolver { [return: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] get; [param: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] set; } private static CallSite<Func<CallSite, object, object>> CreateCallSiteGetter(string name) { return CallSite<Func<CallSite, object, object>>.Create(new NoThrowGetBinderMember((GetMemberBinder)DynamicUtils.BinderWrapper.GetMember(name, typeof(DynamicUtils)))); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 1, 1, 1, 2, 1 })] private static CallSite<Func<CallSite, object, object, object>> CreateCallSiteSetter(string name) { return CallSite<Func<CallSite, object, object, object>>.Create(new NoThrowSetBinderMember((SetMemberBinder)DynamicUtils.BinderWrapper.SetMember(name, typeof(DynamicUtils)))); } public JsonDynamicContract(Type underlyingType) : base(underlyingType) { ContractType = JsonContractType.Dynamic; Properties = new JsonPropertyCollection(base.UnderlyingType); } internal bool TryGetMember(IDynamicMetaObjectProvider dynamicProvider, string name, [System.Runtime.CompilerServices.Nullable(2)] out object value) { ValidationUtils.ArgumentNotNull(dynamicProvider, "dynamicProvider"); CallSite<Func<CallSite, object, object>> callSite = _callSiteGetters.Get(name); object obj = callSite.Target(callSite, dynamicProvider); if (obj != NoThrowExpressionVisitor.ErrorResult) { value = obj; return true; } value = null; return false; } internal bool TrySetMember(IDynamicMetaObjectProvider dynamicProvider, string name, [System.Runtime.CompilerServices.Nullable(2)] object value) { ValidationUtils.ArgumentNotNull(dynamicProvider, "dynamicProvider"); CallSite<Func<CallSite, object, object, object>> callSite = _callSiteSetters.Get(name); return callSite.Target(callSite, dynamicProvider, value) != NoThrowExpressionVisitor.ErrorResult; } } }