public async Task ReadAsync_ReturnsEdmComplexObjectCollection_TypelessMode() { // Arrange IEdmTypeReference addressType = _model.GetEdmTypeReference(typeof(Address)).AsComplex(); IEdmCollectionTypeReference addressCollectionType = new EdmCollectionTypeReference(new EdmCollectionType(addressType)); HttpContent content = new StringContent("{ 'value': [ {'@odata.type':'Microsoft.AspNetCore.OData.Tests.Models.Address', 'City' : 'Redmond' } ] }"); HeaderDictionary headerDict = new HeaderDictionary { { "Content-Type", "application/json" } }; IODataRequestMessage request = ODataMessageWrapperHelper.Create(await content.ReadAsStreamAsync(), headerDict); ODataMessageReader reader = new ODataMessageReader(request, new ODataMessageReaderSettings(), _model); var deserializer = new ODataResourceSetDeserializer(_deserializerProvider); ODataDeserializerContext readContext = new ODataDeserializerContext { Model = _model, ResourceType = typeof(IEdmObject), ResourceEdmType = addressCollectionType }; // Act IEnumerable result = await deserializer.ReadAsync(reader, typeof(IEdmObject), readContext) as IEnumerable; // Assert var addresses = result.Cast <EdmComplexObject>(); Assert.NotNull(addresses); EdmComplexObject address = Assert.Single(addresses); Assert.Equal(new[] { "City" }, address.GetChangedPropertyNames()); object city; Assert.True(address.TryGetPropertyValue("City", out city)); Assert.Equal("Redmond", city); }
public void Read_ReturnsEdmComplexObjectCollection_TypelessMode() { // Arrange IEdmTypeReference addressType = _model.GetEdmTypeReference(typeof(Address)).AsComplex(); IEdmCollectionTypeReference addressCollectionType = new EdmCollectionTypeReference(new EdmCollectionType(addressType)); HttpContent content = new StringContent("{ 'value': [ {'@odata.type':'System.Web.OData.TestCommon.Models.Address', 'City' : 'Redmond' } ] }"); content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); IODataRequestMessage request = new ODataMessageWrapper(content.ReadAsStreamAsync().Result, content.Headers); ODataMessageReader reader = new ODataMessageReader(request, new ODataMessageReaderSettings(), _model); var deserializer = new ODataResourceSetDeserializer(_deserializerProvider); ODataDeserializerContext readContext = new ODataDeserializerContext { Model = _model, ResourceType = typeof(IEdmObject), ResourceEdmType = addressCollectionType }; // Act IEnumerable result = deserializer.Read(reader, typeof(IEdmObject), readContext) as IEnumerable; // Assert var addresses = result.Cast <EdmComplexObject>(); Assert.NotNull(addresses); EdmComplexObject address = Assert.Single(addresses); Assert.Equal(new[] { "City" }, address.GetChangedPropertyNames()); object city; Assert.True(address.TryGetPropertyValue("City", out city)); Assert.Equal("Redmond", city); }