public Object ParseAsync(HttpResponseMessage response) { using (Stream stream = response.Content.ReadAsStreamAsync().Result) { var responseMessage = new ODataResponseMessage(stream); var context = new ODataDeserializerContext() { Model = Model, Request = response.RequestMessage }; using (var messageReader = new ODataMessageReader(responseMessage, _settings, Model)) { ODataResult result = GetODataResult(messageReader); while (result.ODataReader.Read()) { if (result.ODataReader.State == ODataReaderState.EntryEnd) { var entry = (ODataEntry)result.ODataReader.Item; var entityType = (IEdmEntityType)Model.FindType(entry.TypeName); var entityTypeReference = new EdmEntityTypeReference(entityType, false); var navigationLinks = new ODataEntryWithNavigationLinks(entry); result.AddResult(_deserializer.ReadEntry(navigationLinks, entityTypeReference, context)); } } return(result.Result); } } }
internal static object ConvertEntity(ODataMessageReader oDataMessageReader, IEdmTypeReference edmTypeReference, ODataDeserializerContext readContext) { IEdmEntityTypeReference entityType = edmTypeReference.AsEntity(); EdmEntitySet tempEntitySet = new EdmEntitySet(readContext.Model.EntityContainer, "temp", entityType.EntityDefinition()); ODataReader entryReader = oDataMessageReader.CreateODataEntryReader(tempEntitySet, entityType.EntityDefinition()); object item = ODataEntityDeserializer.ReadEntryOrFeed(entryReader); ODataEntryWithNavigationLinks topLevelEntry = item as ODataEntryWithNavigationLinks; Contract.Assert(topLevelEntry != null); ODataEntityDeserializer entityDeserializer = (ODataEntityDeserializer)DeserializerProvider.GetEdmTypeDeserializer(entityType); object entity = entityDeserializer.ReadInline(topLevelEntry, entityType, readContext); return(CovertEntityId(entity, topLevelEntry.Entry, entityType, readContext)); }
private DataObject CreateDataObject(DataObjectEdmModel model, IEdmEntityTypeReference entityTypeReference, ODataEntryWithNavigationLinks entry, out Type objType) { IEdmEntityType entityType = entityTypeReference.EntityDefinition(); objType = model.GetDataObjectType(model.GetEdmEntitySet(entityType).Name); var obj = (DataObject)Activator.CreateInstance(objType); foreach (ODataProperty odataProp in entry.Entry.Properties) { string clrPropName = model.GetDataObjectPropertyName(objType, odataProp.Name); Information.SetPropValueByName(obj, clrPropName, odataProp.Value); } return(obj); }