public static IEnumerable <ODataEntry> ReadODataFeed(IEdmModel model, Stream stream) { ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings() { BaseUri = ServiceRootUri }; var responseMessage = new ODataResponseMessage(stream); using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model)) { List <ODataEntry> entries = new List <ODataEntry>(); var reader = messageReader.CreateODataFeedReader(); while (reader.Read()) { switch (reader.State) { case ODataReaderState.EntryEnd: ODataEntry entry = reader.Item as ODataEntry; entries.Add(entry); yield return(entry); break; default: break; } } } }
public static void WriteODataFeed(IEdmModel model, Stream stream, NavigationPropertySegment containedSegment, ODataPath queryPath) { // Create a ODataEntry ODataEntry[] entries = new ODataEntry[] { new ODataEntry() { Properties = new[] { new ODataProperty { Name = "ProductID", Value = 1 }, }, } }; var message = new ODataResponseMessage(stream); ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings(); writerSettings.ODataUri = new ODataUri() { ServiceRoot = ServiceRootUri }; writerSettings.PayloadBaseUri = ServiceRootUri; writerSettings.SetContentType("application/json;odata.metadata=full", Encoding.UTF8.WebName); writerSettings.AutoComputePayloadMetadataInJson = true; writerSettings.ODataUri = new ODataUri() { ServiceRoot = ServiceRootUri, Path = queryPath, }; using (var messageWriter = new ODataMessageWriter(message, writerSettings, model)) { var feedWriter = messageWriter.CreateODataFeedWriter(containedSegment.NavigationSource as IEdmEntitySetBase, containedSegment.NavigationSource.EntityType()); var feed = new ODataFeed(); feedWriter.WriteStart(feed); foreach (ODataEntry entry in entries) { feedWriter.WriteStart(entry); feedWriter.WriteEnd(); } feedWriter.WriteEnd(); feedWriter.Flush(); } }