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