/// <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); }