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);
                }
            }
        }
Beispiel #2
0
            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);
        }