/// <summary> /// Recursively hides the properties, and any child properties. /// </summary> /// <param name="maskedQueryValue">The query value with properties to hide.</param> /// <param name="propertyName">The name of the property to hide.</param> private static void HidePropertyRecursive(MaskedQueryStructuralValue maskedQueryValue, string propertyName) { var propertyValue = maskedQueryValue.GetValue(propertyName) as QueryStructuralValue; if (propertyValue != null) { var maskedPropertyValue = propertyValue as MaskedQueryStructuralValue; if (maskedPropertyValue == null) { maskedPropertyValue = MaskedQueryStructuralValue.Create(propertyValue); } var subPropertyNames = maskedPropertyValue.AllMemberNames.ToList(); foreach (string subPropertyName in subPropertyNames) { HidePropertyRecursive(maskedPropertyValue, subPropertyName); } maskedQueryValue.SetValue(propertyName, maskedPropertyValue); } maskedQueryValue.HideMember(propertyName); }