/// <summary>
        /// Verify Common.Core.4017
        /// </summary>
        /// <param name="context">Service context</param>
        /// <param name="info">out parameter to return violation information when rule fail</param>
        /// <returns>true if rule passes; false otherwise</returns>
        public override bool?Verify(ServiceContext context, out ExtensionRuleViolationInfo info)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            bool?passed = null;

            info = null;

            if (context.ResponseHttpHeaders.Contains(context.Version == ODataVersion.V4 ? Constants.V4OdataStreaming : Constants.OdataStreaming + @"=true"))
            {
                JObject jObj;
                context.ResponsePayload.TryToJObject(out jObj);
                List <XElement>  normalProps     = MetadataHelper.GetAllPropertiesOfEntity(context.MetadataDocument, context.EntityTypeShortName, MatchPropertyType.Normal);
                List <string>    normalPropNames = (from normaP in normalProps select normaP.Attribute("Name").Value).ToList();
                List <JProperty> annotations     = new List <JProperty>();
                JsonParserHelper.GetAnnotationsFromResponsePayload(jObj, context.Version, AnnotationType.ArrayOrPrimitive, ref annotations);

                foreach (var a in annotations)
                {
                    passed = null;

                    if (a.Name.Contains(Constants.OdataNavigationLinkPropertyNameSuffix) || a.Name.Contains(Constants.OdataAssociationLinkPropertyNameSuffix))
                    {
                        passed = true;
                        var prop = a.Next;
                        while (prop != null)
                        {
                            if (prop.Type == JTokenType.Property && null != normalPropNames.Find(n => { return(n.Contains(a.Name)); }))
                            {
                                passed = false;
                                break;
                            }

                            prop = prop.Next;
                        }

                        if (passed == false)
                        {
                            info = new ExtensionRuleViolationInfo(this.ErrorMessage, context.Destination, context.ResponsePayload);
                            break;
                        }
                    }
                }
            }

            return(passed);
        }
        /// <summary>
        /// Verify Common.Core.4122
        /// </summary>
        /// <param name="context">Service context</param>
        /// <param name="info">out parameter to return violation information when rule fail</param>
        /// <returns>true if rule passes; false otherwise</returns>
        public override bool?Verify(ServiceContext context, out ExtensionRuleViolationInfo info)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            bool?passed = null;

            info = null;

            JObject jObj;

            context.ResponsePayload.TryToJObject(out jObj);

            List <JProperty> anns = new List <JProperty>();

            JsonParserHelper.GetAnnotationsFromResponsePayload(jObj, context.Version, AnnotationType.Object, ref anns);

            foreach (JProperty ann in anns)
            {
                passed = null;

                if (ann.Parent.Type == JTokenType.Object)
                {
                    passed = true;
                }
                else
                {
                    passed = false;
                    info   = new ExtensionRuleViolationInfo(this.ErrorMessage, context.Destination, context.ResponsePayload);
                    break;
                }
            }

            return(passed);
        }