/// <summary>
        /// Gets the expected options for the given content type and version
        /// </summary>
        /// <param name="contentType">The content type of the payload</param>
        /// <param name="version">The current version</param>
        /// <param name="payloadUri">The payload URI</param>
        /// <returns>The payload options for the given content type and version</returns>
        public ODataPayloadOptions GetExpectedPayloadOptions(string contentType, DataServiceProtocolVersion version, ODataUri payloadUri)
        {
            ExceptionUtilities.CheckArgumentNotNull(contentType, "contentType");
            ExceptionUtilities.Assert(version != DataServiceProtocolVersion.Unspecified, "Version cannot be unspecified");

            var expected = expectedPayloadOptions;

            if (contentType.StartsWith(MimeTypes.ApplicationJsonODataLightNonStreaming, System.StringComparison.Ordinal) ||
                contentType.StartsWith(MimeTypes.ApplicationJsonODataLightStreaming, System.StringComparison.Ordinal))
            {
                expected = ODataPayloadOptions.IncludeTypeNames
                           | ODataPayloadOptions.IncludeMediaResourceSourceLinks
                           | ODataPayloadOptions.IncludeMediaResourceEditLinks
                           | ODataPayloadOptions.IncludeNamedMediaResourceSourceLinks
                           | ODataPayloadOptions.IncludeNamedMediaResourceEditLinks
                           | ODataPayloadOptions.IncludeEntityIdentifier
                           | ODataPayloadOptions.ConventionallyProducedNamedStreamSelfLink;

                var selectedPropertyNames = ODataUtilities.GetSelectedPropertyNamesFromUri(payloadUri, this.UriConverter).ToList();
                if (selectedPropertyNames.Any())
                {
                    EntitySet  payloadEntitySet  = null;
                    EntityType payloadEntityType = null;
                    if (payloadUri.TryGetExpectedEntitySetAndType(out payloadEntitySet, out payloadEntityType) &&
                        !ODataUtilities.ContainsAllIdentityPropertyNames(selectedPropertyNames, payloadEntityType))
                    {
                        // JSON Light projections without identity do not contain enough metadata to deduce
                        // id and link values.
                        expected = ODataPayloadOptions.IncludeTypeNames;
                    }
                }
            }
            else if (version < DataServiceProtocolVersion.V4)
            {
                // Type names for null values are only supported in V1 and V2.
                expected = expected | ODataPayloadOptions.IncludeTypeNamesForNullValues;
            }

            return(expected);
        }