/// <summary> /// Constructor. /// </summary> /// <param name="outputContext">The output context to write to.</param> /// <param name="navigationSource">The navigation source we are going to write entities for.</param> /// <param name="entityType">The entity type for the entries in the feed to be written (or null if the entity set base type should be used).</param> /// <param name="writingFeed">True if the writer is created for writing a feed; false when it is created for writing an entry.</param> /// <param name="listener">If not null, the writer will notify the implementer of the interface of relevant state changes in the writer.</param> protected ODataWriterCore( ODataOutputContext outputContext, IEdmNavigationSource navigationSource, IEdmEntityType entityType, bool writingFeed, IODataReaderWriterListener listener = null) { Debug.Assert(outputContext != null, "outputContext != null"); this.outputContext = outputContext; this.writingFeed = writingFeed; // create a collection validator when writing a top-level feed and a user model is present if (this.writingFeed && this.outputContext.Model.IsUserModel()) { this.feedValidator = new FeedWithoutExpectedTypeValidator(); } if (navigationSource != null && entityType == null) { entityType = this.outputContext.EdmTypeResolver.GetElementType(navigationSource); } ODataUri odataUri = outputContext.MessageWriterSettings.ODataUri.Clone(); // Remove key for top level entry if (!writingFeed && odataUri != null && odataUri.Path != null) { odataUri.Path = odataUri.Path.TrimEndingKeySegment(); } this.listener = listener; this.scopes.Push(new Scope(WriterState.Start, /*item*/null, navigationSource, entityType, /*skipWriting*/false, outputContext.MessageWriterSettings.SelectedProperties, odataUri)); }
/// <summary> /// Constructor. /// </summary> /// <param name="inputContext">The input to read the payload from.</param> /// <param name="readingFeed">true if the reader is created for reading a feed; false when it is created for reading an entry.</param> /// <param name="listener">If not null, the reader will notify the implementer of the interface of relevant state changes in the reader.</param> protected ODataReaderCore( ODataInputContext inputContext, bool readingFeed, IODataReaderWriterListener listener) { Debug.Assert(inputContext != null, "inputContext != null"); this.inputContext = inputContext; this.readingFeed = readingFeed; this.listener = listener; this.currentEntryDepth = 0; // create a collection validator when reading a top-level feed and a user model is present if (this.readingFeed && this.inputContext.Model.IsUserModel()) { this.feedValidator = new FeedWithoutExpectedTypeValidator(); } }