From a7471ae0b96d5a1d1b1d316cd9c8de84ee351258 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 17 May 2019 13:13:30 +1200 Subject: [PATCH] Fix loading extra assemblies by only filtering for ByRef types on default members --- Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs index a3b934b8..90690d47 100644 --- a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs +++ b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs @@ -233,8 +233,10 @@ namespace Newtonsoft.Json.Serialization MemberSerialization memberSerialization = JsonTypeReflector.GetObjectMemberSerialization(objectType, ignoreSerializableAttribute); + // Exclude index properties + // Do not filter ByRef types here because accessing FieldType/PropertyType can trigger additonal assembly loads IEnumerable allMembers = ReflectionUtils.GetFieldsAndProperties(objectType, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static) - .Where(FilterMembers); + .Where(m => m is PropertyInfo p ? !ReflectionUtils.IsIndexedProperty(p) : true); List serializableMembers = new List(); @@ -245,6 +247,7 @@ namespace Newtonsoft.Json.Serialization #endif #pragma warning disable 618 + // Exclude index properties and ByRef types List defaultMembers = ReflectionUtils.GetFieldsAndProperties(objectType, DefaultMembersSearchFlags) .Where(FilterMembers).ToList(); #pragma warning restore 618