diff --git a/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs b/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs index e1e5fcb4..950e7336 100644 --- a/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs +++ b/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs @@ -657,24 +657,27 @@ namespace Newtonsoft.Json.Utilities // update: I think this is fixed in .NET 3.5 SP1 - leave this in for now... List distinctMembers = new List(targetMembers.Count); - var groupedMembers = targetMembers.GroupBy(m => m.Name).Select(g => new { Count = g.Count(), Members = g.Cast() }); - foreach (var groupedMember in groupedMembers) + foreach (var groupedMember in targetMembers.GroupBy(m => m.Name)) { - if (groupedMember.Count == 1) + int count = groupedMember.Count(); + IList members = groupedMember.ToList(); + + if (count == 1) { - distinctMembers.Add(groupedMember.Members.First()); + distinctMembers.Add(members.First()); } else { - var members = groupedMember.Members.Where(m => !IsOverridenGenericMember(m, bindingAttr) || m.Name == "Item"); + var resolvedMembers = members.Where(m => !IsOverridenGenericMember(m, bindingAttr) || m.Name == "Item"); - distinctMembers.AddRange(members); + distinctMembers.AddRange(resolvedMembers); } } return distinctMembers; } + private static bool IsOverridenGenericMember(MemberInfo memberInfo, BindingFlags bindingAttr) { MemberTypes memberType = memberInfo.MemberType();