/// <inheridoc /> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (writeContext == null) { throw Error.ArgumentNull("writeContext"); } if (graph != null) { ODataEntityReferenceLinks entityReferenceLinks = graph as ODataEntityReferenceLinks; if (entityReferenceLinks == null) { IEnumerable<Uri> uris = graph as IEnumerable<Uri>; if (uris == null) { throw new SerializationException(Error.Format(SRResources.CannotWriteType, GetType().Name, graph.GetType().FullName)); } entityReferenceLinks = new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }; } messageWriter.WriteEntityReferenceLinks(entityReferenceLinks); } }
/// <inheridoc /> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (writeContext == null) { throw Error.ArgumentNull("writeContext"); } if (writeContext.Path == null) { throw new SerializationException(SRResources.ODataPathMissing); } IEdmEntitySet entitySet = writeContext.Path.GetEntitySet(); if (entitySet == null) { throw new SerializationException(SRResources.EntitySetMissingDuringSerialization); } IEdmNavigationProperty navigationProperty = writeContext.Path.GetNavigationProperty(); if (navigationProperty == null) { throw new SerializationException(SRResources.NavigationPropertyMissingDuringSerialization); } if (graph != null) { ODataEntityReferenceLinks entityReferenceLinks = graph as ODataEntityReferenceLinks; if (entityReferenceLinks == null) { IEnumerable<Uri> uris = graph as IEnumerable<Uri>; if (uris == null) { throw new SerializationException(Error.Format(SRResources.CannotWriteType, GetType().Name, graph.GetType().FullName)); } entityReferenceLinks = new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }; if (writeContext.Request != null) { entityReferenceLinks.Count = writeContext.Request.ODataProperties().TotalCount; } } messageWriter.WriteEntityReferenceLinks(entityReferenceLinks, entitySet, navigationProperty); } }
/// <inheridoc /> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (writeContext == null) { throw Error.ArgumentNull("writeContext"); } if (graph != null) { ODataEntityReferenceLinks entityReferenceLinks = GetEntityReferenceLinks(graph, writeContext); messageWriter.WriteEntityReferenceLinks(entityReferenceLinks); } }
public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw new ArgumentNullException("messageWriter"); } if (writeContext == null) { throw new ArgumentNullException("writeContext"); } IEdmEntitySet entitySet = writeContext.EntitySet; if (entitySet == null) { throw new SerializationException("The entity set is nmissing during serialization"); } IEdmNavigationProperty navigationProperty = GetNavigationProperty(writeContext.Path); if (navigationProperty == null) { throw new SerializationException("The Navigation property is missing"); } if (graph != null) { Uri[] uris = graph as Uri[]; if (uris == null) { throw new SerializationException("Cannot write the type"); } messageWriter.WriteEntityReferenceLinks(new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }, entitySet, navigationProperty); } }
public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw new ArgumentNullException("messageWriter"); } if (graph != null) { Uri[] uris = GetUris(graph); messageWriter.WriteEntityReferenceLinks(new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }); } }
/// <inheridoc /> public override Task WriteObjectAsync(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (writeContext == null) { throw Error.ArgumentNull("writeContext"); } if (graph != null) { ODataEntityReferenceLinks entityReferenceLinks = graph as ODataEntityReferenceLinks; if (entityReferenceLinks == null) { IEnumerable <Uri> uris = graph as IEnumerable <Uri>; if (uris == null) { throw new SerializationException(Error.Format(SRResources.CannotWriteType, GetType().Name, graph.GetType().FullName)); } entityReferenceLinks = new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }; if (writeContext.Request != null) { entityReferenceLinks.Count = writeContext.Request.ODataProperties().TotalCount; } } messageWriter.WriteEntityReferenceLinks(entityReferenceLinks); } return(Task.FromResult(true)); }
private string WriteAndVerifyLinks(StreamResponseMessage responseMessage, ODataMessageWriter messageWriter, string mimeType) { var links = new ODataEntityReferenceLinks() { Links = new[] { new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") }, new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-7)") }, }, NextPageLink = new Uri(this.ServiceUri + "Customer(-10)/Orders/$ref?$skiptoken=-7") }; messageWriter.WriteEntityReferenceLinks(links); Stream stream = responseMessage.GetStream(); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { stream.Seek(0, SeekOrigin.Begin); var settings = new ODataMessageReaderSettings() { BaseUri = this.ServiceUri }; ODataMessageReader messageReader = new ODataMessageReader(responseMessage, settings, WritePayloadHelper.Model); ODataEntityReferenceLinks linksRead = messageReader.ReadEntityReferenceLinks(); Assert.AreEqual(2, linksRead.Links.Count(), "linksRead.Links.Count"); Assert.IsNotNull(linksRead.NextPageLink, "linksRead.NextPageLink"); } return(WritePayloadHelper.ReadStreamContent(stream)); }
/// <inheridoc /> public override Task WriteObjectAsync(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (writeContext == null) { throw Error.ArgumentNull("writeContext"); } if (graph != null) { ODataEntityReferenceLinks entityReferenceLinks = graph as ODataEntityReferenceLinks; if (entityReferenceLinks == null) { IEnumerable<Uri> uris = graph as IEnumerable<Uri>; if (uris == null) { throw new SerializationException(Error.Format(SRResources.CannotWriteType, GetType().Name, graph.GetType().FullName)); } entityReferenceLinks = new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }; if (writeContext.Request != null) { entityReferenceLinks.Count = writeContext.Request.ODataProperties().TotalCount; } } messageWriter.WriteEntityReferenceLinks(entityReferenceLinks); } return Task.FromResult(true); }
private static void WriteTopLevelEntityReferenceLinks() { Console.WriteLine("WriteTopLevelEntityReferenceLinks"); var msg = ODataSamplesUtil.CreateMessage(); msg.PreferenceAppliedHeader().AnnotationFilter = "*"; var settings = new ODataMessageWriterSettings(BaseSettings) { ODataUri = new ODataUri() { ServiceRoot = new Uri("http://demo/odata.svc/") }, }; var link1 = new ODataEntityReferenceLink() { Url = new Uri("http://demo/odata.svc/People(3)") }; var link2 = new ODataEntityReferenceLink() { Url = new Uri("http://demo/odata.svc/People(4)") }; var links = new ODataEntityReferenceLinks() { Links = new[] { link1, link2 } }; using (var omw = new ODataMessageWriter((IODataResponseMessage)msg, settings, ExtModel.Model)) { omw.WriteEntityReferenceLinks(links); } Console.WriteLine(ODataSamplesUtil.MessageToString(msg)); }
public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw new ArgumentNullException("messageWriter"); } if (writeContext == null) { throw new ArgumentNullException("writeContext"); } if (graph != null) { Uri[] uris = graph as Uri[]; if (uris == null) { throw new SerializationException("Cannot write the type"); } messageWriter.WriteEntityReferenceLinks(new ODataEntityReferenceLinks { Links = uris.Select(uri => new ODataEntityReferenceLink { Url = uri }) }); } }
private static void WriteTopLevelEntityReferenceLinks() { Console.WriteLine("WriteTopLevelEntityReferenceLinks"); var msg = ODataSamplesUtil.CreateMessage(); msg.PreferenceAppliedHeader().AnnotationFilter = "*"; var settings = new ODataMessageWriterSettings(BaseSettings) { ODataUri = new ODataUri() { ServiceRoot = new Uri("http://demo/odata.svc/") }, }; var link1 = new ODataEntityReferenceLink() { Url = new Uri("http://demo/odata.svc/People(3)") }; var link2 = new ODataEntityReferenceLink() { Url = new Uri("http://demo/odata.svc/People(4)") }; var links = new ODataEntityReferenceLinks() { Links = new[] { link1, link2 } }; using (var omw = new ODataMessageWriter((IODataResponseMessage)msg, settings, ExtModel.Model)) { omw.WriteEntityReferenceLinks(links); } Console.WriteLine(ODataSamplesUtil.MessageToString(msg)); }
public void WriteTopLevelEntityReferenceLinks() { ODataEntityReferenceLink link1 = new ODataEntityReferenceLink { Url = new Uri("http://host/Customers(1)") }; link1.InstanceAnnotations.Add(new ODataInstanceAnnotation("Is.New", new ODataPrimitiveValue(true))); ODataEntityReferenceLink link2 = new ODataEntityReferenceLink { Url = new Uri("http://host/Customers(2)") }; link2.InstanceAnnotations.Add(new ODataInstanceAnnotation("TestNamespace.unknown", new ODataPrimitiveValue(123))); link2.InstanceAnnotations.Add(new ODataInstanceAnnotation("custom.annotation", new ODataPrimitiveValue(456))); ODataEntityReferenceLinks referencelinks = new ODataEntityReferenceLinks() { Links = new[] { link1, link2 } }; var writerSettings = new ODataMessageWriterSettings { DisableMessageStreamDisposal = true }; writerSettings.SetContentType(ODataFormat.Json); writerSettings.SetServiceDocumentUri(new Uri("http://odata.org/test")); MemoryStream stream = new MemoryStream(); IODataResponseMessage requestMessageToWrite = new InMemoryMessage { StatusCode = 200, Stream = stream }; requestMessageToWrite.PreferenceAppliedHeader().AnnotationFilter = "*"; using (var messageWriter = new ODataMessageWriter(requestMessageToWrite, writerSettings, EdmModel)) { messageWriter.WriteEntityReferenceLinks(referencelinks); } stream.Position = 0; string payload = (new StreamReader(stream)).ReadToEnd(); string expectedPayload = "{\"@odata.context\":\"http://odata.org/test/$metadata#Collection($ref)\",\"value\":[{\"@odata.id\":\"http://host/Customers(1)\",\"@Is.New\":true},{\"@odata.id\":\"http://host/Customers(2)\",\"@TestNamespace.unknown\":123,\"@custom.annotation\":456}]}"; Assert.AreEqual(expectedPayload, payload); }
public void WriteWithoutSerializationInfo() { foreach (var mimeType in this.testMimeTypes) { var settings = new ODataMessageWriterSettings(); settings.ODataUri = new ODataUri() { ServiceRoot = this.ServiceUri }; // write entry without serialization info var responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); var entry = this.CreatePersonEntryWithoutSerializationInfo(); var expectedError = mimeType.Contains(MimeTypes.ODataParameterNoMetadata) ? null : "ODataResourceTypeContext_MetadataOrSerializationInfoMissing"; AssertThrows <ODataException>(() => odataWriter.WriteStart(entry), expectedError); } // write feed without serialization info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceSetWriter(); var feed = this.CreatePersonFeed(); var entry = this.CreatePersonEntryWithoutSerializationInfo(); entry.SetSerializationInfo(new ODataResourceSerializationInfo() { NavigationSourceName = "Person", NavigationSourceEntityTypeName = NameSpace + "Person" }); var expectedError = mimeType.Contains(MimeTypes.ODataParameterNoMetadata) ? null : "ODataResourceTypeContext_MetadataOrSerializationInfoMissing"; AssertThrows <ODataException>(() => odataWriter.WriteStart(feed), expectedError); } // write collection without serialization info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataCollectionWriter(); var collectionStart = new ODataCollectionStart() { Name = "BackupContactInfo" }; var expectedError = mimeType.Contains(MimeTypes.ODataParameterNoMetadata) ? null : "ODataContextUriBuilder_TypeNameMissingForTopLevelCollection"; AssertThrows <ODataException>(() => odataWriter.WriteStart(collectionStart), expectedError); } // write a reference link without serialization info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var link = new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") }; messageWriter.WriteEntityReferenceLink(link); // No exception is expected. Simply verify the writing succeeded. if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { Stream stream = responseMessageWithoutModel.GetStream(); Assert.IsTrue(WritePayloadHelper.ReadStreamContent(stream).Contains("$metadata#$ref")); } } // write reference links without serialization info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var links = new ODataEntityReferenceLinks() { Links = new[] { new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") } }, }; messageWriter.WriteEntityReferenceLinks(links); // No exception is expected. Simply verify the writing succeeded. if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { Stream stream = responseMessageWithoutModel.GetStream(); Assert.IsTrue(WritePayloadHelper.ReadStreamContent(stream).Contains("$metadata#Collection($ref)")); } } // write request message containing an entry var requestMessageWithoutModel = new StreamRequestMessage(new MemoryStream(), new Uri(this.ServiceUri + "Person"), "POST"); requestMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(requestMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); var entry = this.CreatePersonEntryWithoutSerializationInfo(); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); Stream stream = requestMessageWithoutModel.GetStream(); Assert.IsTrue(WritePayloadHelper.ReadStreamContent(stream).Contains("Person(-5)\",\"PersonId\":-5,\"Name\":\"xhsdckkeqzvlnprheujeycqrglfehtdocildrequohlffazfgtvmddyqsaxrojqxrsckohrakdxlrghgmzqnyruzu\"")); } } }
public void WriteEntryWithWrongSerializationInfo() { foreach (var mimeType in this.testMimeTypes) { var settings = new ODataMessageWriterSettings(); settings.ODataUri = new ODataUri() { ServiceRoot = this.ServiceUri }; // wrong EntitySetName for entry var responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceWriter(); var entry = this.CreatePersonEntryWithoutSerializationInfo(); entry.SetSerializationInfo(new ODataResourceSerializationInfo() { NavigationSourceName = "Parsen", NavigationSourceEntityTypeName = NameSpace + "Person" }); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains("\"PersonId\":-5")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Parsen/$entity")); Assert.IsTrue(result.Contains("Person(-5)\",\"PersonId\":-5")); } else { Assert.IsFalse(result.Contains("Person(-5)\",\"PersonId\":-5")); } } // wrong EntitySetName for feed responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceSetWriter(); var feed = this.CreatePersonFeed(); feed.SetSerializationInfo(new ODataResourceSerializationInfo() { NavigationSourceName = "Parsen", NavigationSourceEntityTypeName = NameSpace + "Person" }); var entry = this.CreatePersonEntryWithoutSerializationInfo(); odataWriter.WriteStart(feed); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); odataWriter.WriteEnd(); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains("\"PersonId\":-5")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Parsen\"")); Assert.IsTrue(result.Contains("Person(-5)\",\"PersonId\":-5")); } else { Assert.IsFalse(result.Contains("Person(-5)\",\"PersonId\":-5")); } } // wrong complex collection type name responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataResourceSetWriter(); var complexCollection = new ODataResourceSetWrapper() { ResourceSet = new ODataResourceSet(), Resources = new List <ODataResourceWrapper>() { WritePayloadHelper.CreatePrimaryContactODataWrapper() } }; complexCollection.ResourceSet.SetSerializationInfo(new ODataResourceSerializationInfo() { ExpectedTypeName = NameSpace + "ContactDETAIL" }); ODataWriterHelper.WriteResourceSet(odataWriter, complexCollection); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // [{"@odata.type":"#Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails","*****@*****.**":"#Collection(String)"... Assert.IsTrue(result.Contains("\"value\":[{\"@odata.type\":\"#Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails\",\"EmailBag")); // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Collection(" + NameSpace + "ContactDETAIL)")); } else { Assert.IsFalse(result.Contains("\"@odata.type\":\"#Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails\"")); } } // The following two cases of wrong reference link info is no longer active. The ODataEntityReferenceLinkSerializationInfo is ignored when writer writes the payload. // Consider removing them. // wrong reference link info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var link = new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") }; messageWriter.WriteEntityReferenceLink(link); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains(this.ServiceUri + "Order(-10)")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.context Assert.IsTrue(result.Contains("$metadata#$ref")); } } // wrong reference links info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var links = new ODataEntityReferenceLinks() { Links = new[] { new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") } }, }; messageWriter.WriteEntityReferenceLinks(links); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains(this.ServiceUri + "Order(-10)")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Collection($ref)")); } } } }
public void WriteEntryWithWrongSerializationInfo() { foreach (var mimeType in this.testMimeTypes) { var settings = new ODataMessageWriterSettings(); settings.ODataUri = new ODataUri() { ServiceRoot = this.ServiceUri }; // wrong EntitySetName for entry var responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataEntryWriter(); var entry = this.CreatePersonEntryWithoutSerializationInfo(); entry.SetSerializationInfo(new ODataFeedAndEntrySerializationInfo() { NavigationSourceName = "Parsen", NavigationSourceEntityTypeName = NameSpace + "Person" }); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains("Person(-5)\",\"PersonId\":-5")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Parsen/$entity")); } } // wrong EntitySetName for feed responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataFeedWriter(); var feed = this.CreatePersonFeed(); feed.SetSerializationInfo(new ODataFeedAndEntrySerializationInfo() { NavigationSourceName = "Parsen", NavigationSourceEntityTypeName = NameSpace + "Person" }); var entry = this.CreatePersonEntryWithoutSerializationInfo(); odataWriter.WriteStart(feed); odataWriter.WriteStart(entry); odataWriter.WriteEnd(); odataWriter.WriteEnd(); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains("Person(-5)\",\"PersonId\":-5")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Parsen\"")); } } // wrong collection type name responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var odataWriter = messageWriter.CreateODataCollectionWriter(); var collctionStart = new ODataCollectionStart() { Name = "BackupContactInfo" }; collctionStart.SetSerializationInfo(new ODataCollectionStartSerializationInfo() { CollectionTypeName = "Collection(" + NameSpace + "ContactDETAIL)" }); odataWriter.WriteStart(collctionStart); odataWriter.WriteItem( WritePayloadHelper.CreatePrimaryContactODataComplexValue()); odataWriter.WriteEnd(); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains("value\":[{\"EmailBag\":[")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Collection(" + NameSpace + "ContactDETAIL)")); } } // The following two cases of wrong reference link info is no longer active. The ODataEntityReferenceLinkSerializationInfo is ignored when writer writes the payload. // Consider removing them. // wrong reference link info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var link = new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") }; messageWriter.WriteEntityReferenceLink(link); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains(this.ServiceUri + "Order(-10)")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.context Assert.IsTrue(result.Contains("$metadata#$ref")); } } // wrong reference links info responseMessageWithoutModel = new StreamResponseMessage(new MemoryStream()); responseMessageWithoutModel.SetHeader("Content-Type", mimeType); using (var messageWriter = new ODataMessageWriter(responseMessageWithoutModel, settings)) { var links = new ODataEntityReferenceLinks() { Links = new[] { new ODataEntityReferenceLink() { Url = new Uri(this.ServiceUri + "Order(-10)") } }, }; messageWriter.WriteEntityReferenceLinks(links); var result = WritePayloadHelper.ReadStreamContent(responseMessageWithoutModel.GetStream()); Assert.IsTrue(result.Contains(this.ServiceUri + "Order(-10)")); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { // no metadata does not write odata.metadata Assert.IsTrue(result.Contains("$metadata#Collection($ref)")); } } } }
private string WriteAndVerifyLinks(StreamResponseMessage responseMessage, ODataMessageWriter messageWriter, string mimeType) { var links = new ODataEntityReferenceLinks() { Links = new[] { new ODataEntityReferenceLink() {Url = new Uri(this.ServiceUri + "Order(-10)")}, new ODataEntityReferenceLink() {Url = new Uri(this.ServiceUri + "Order(-7)")}, }, NextPageLink = new Uri(this.ServiceUri + "Customer(-10)/Orders/$ref?$skiptoken=-7") }; messageWriter.WriteEntityReferenceLinks(links); Stream stream = responseMessage.GetStream(); if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata)) { stream.Seek(0, SeekOrigin.Begin); var settings = new ODataMessageReaderSettings() { BaseUri = this.ServiceUri }; ODataMessageReader messageReader = new ODataMessageReader(responseMessage, settings, WritePayloadHelper.Model); ODataEntityReferenceLinks linksRead = messageReader.ReadEntityReferenceLinks(); Assert.AreEqual(2, linksRead.Links.Count(), "linksRead.Links.Count"); Assert.IsNotNull(linksRead.NextPageLink, "linksRead.NextPageLink"); } return WritePayloadHelper.ReadStreamContent(stream); }