コード例 #1
0
        /// <summary>
        /// Start writing a navigation link with content.
        /// </summary>
        /// <param name="navigationLink">The navigation link to write.</param>
        protected override void StartNavigationLinkWithContent(ODataNavigationLink navigationLink)
        {
            Debug.Assert(navigationLink != null, "navigationLink != null");

            Debug.Assert(!string.IsNullOrEmpty(navigationLink.Name), "The navigation link name should have been verified by now.");
            this.verboseJsonOutputContext.JsonWriter.WriteName(navigationLink.Name);

            if (this.verboseJsonOutputContext.WritingResponse)
            {
                // In response, there will be exactly one
                // Everything else is done in the expanded feed or entry since we include the link related information
                // in the feed/entry object.
            }
            else
            {
                WriterValidationUtils.ValidateNavigationLinkHasCardinality(navigationLink);

                // In request, the navigation link may have multiple items in it, so we need to write the array around it here, if it's a collection
                // For singletons, there's no wrapper object/array to write anyway.
                if (navigationLink.IsCollection.Value)
                {
                    this.verboseJsonOutputContext.JsonWriter.StartArrayScope();
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Start writing a navigation link with content.
        /// </summary>
        /// <param name="navigationLink">The navigation link to write.</param>
        protected override void StartNavigationLinkWithContent(ODataNavigationLink navigationLink)
        {
            Debug.Assert(navigationLink != null, "navigationLink != null");
            Debug.Assert(!string.IsNullOrEmpty(navigationLink.Name), "The navigation link name should have been verified by now.");

            if (this.jsonLightOutputContext.WritingResponse)
            {
                // Write @odata.context annotation for navigation property
                var containedEntitySet = this.CurrentScope.NavigationSource as IEdmContainedEntitySet;
                if (containedEntitySet != null)
                {
                    ODataContextUrlInfo info = ODataContextUrlInfo.Create(
                        this.CurrentScope.NavigationSource,
                        this.CurrentScope.EntityType.FullName(),
                        containedEntitySet.NavigationProperty.Type.TypeKind() != EdmTypeKind.Collection,
                        this.CurrentScope.ODataUri);
                    this.jsonLightEntryAndFeedSerializer.WriteNavigationLinkContextUrl(navigationLink, info);
                }

                // Write the navigation link metadata first. The rest is written by the content entry or feed.
                this.jsonLightEntryAndFeedSerializer.WriteNavigationLinkMetadata(navigationLink, this.DuplicatePropertyNamesChecker);
            }
            else
            {
                WriterValidationUtils.ValidateNavigationLinkHasCardinality(navigationLink);
            }
        }
コード例 #3
0
        /// <summary>
        /// Start writing a navigation link with content.
        /// </summary>
        /// <param name="navigationLink">The navigation link to write.</param>
        protected override void StartNavigationLinkWithContent(ODataNavigationLink navigationLink)
        {
            Debug.Assert(navigationLink != null, "navigationLink != null");
            Debug.Assert(!string.IsNullOrEmpty(navigationLink.Name), "The navigation link name should have been verified by now.");

            if (this.jsonLightOutputContext.WritingResponse)
            {
                // Write the navigation link metadata first. The rest is written by the content entry or feed.
                this.jsonLightEntryAndFeedSerializer.WriteNavigationLinkMetadata(navigationLink, this.DuplicatePropertyNamesChecker);
            }
            else
            {
                WriterValidationUtils.ValidateNavigationLinkHasCardinality(navigationLink);
            }
        }
コード例 #4
0
 /// <summary>
 /// Writes the navigation link's start element and atom metadata.
 /// </summary>
 /// <param name="navigationLink">The navigation link to write.</param>
 /// <param name="navigationLinkUrlOverride">Url to use for the navigation link. If this is specified the Url property on the <paramref name="navigationLink"/>
 /// will be ignored. If this parameter is null, the Url from the navigation link is used.</param>
 private void WriteNavigationLinkStart(ODataNavigationLink navigationLink, Uri navigationLinkUrlOverride)
 {
     WriterValidationUtils.ValidateNavigationLinkHasCardinality(navigationLink);
     WriterValidationUtils.ValidateNavigationLinkUrlPresent(navigationLink);
     this.atomEntryAndFeedSerializer.WriteNavigationLinkStart(navigationLink, navigationLinkUrlOverride);
 }