Получить имена элементов ODATA и типы данных в C # или итерировать EdmCollectionType - PullRequest
0 голосов
/ 18 марта 2019

Здесь я получаю имя сущности, но не могу получить имена элементов и их типы данных, хотя я вижу их в отладчике, как показано на рисунке ниже.

Изображение отладчика показывает путь к типам данных элемента, начиная с «entity.Type.ElementType», но Intellisense показывает, что «ElementType» не вариант, хотя я вижу его на изображении отладчика.

Code gets entity name but how to get element name and data type

Debugger path to element name and data type

Я вижу, что путь к типу данных - это переменная entity-> Type-> elementtype-> Definition-> Объявленные свойства-> Тип-> Определение-> Имя, но Intellisense не поможет достичь этого уровня.

введите описание изображения здесь

1 Ответ

0 голосов
/ 20 марта 2019

Вот что в итоге сработало:

 var request = WebRequest.CreateHttp(baseUrl + "$metadata");
            var settings = new ODataMessageReaderSettings() { MessageQuotas = new ODataMessageQuotas() { MaxReceivedMessageSize = 35000000 } };
            var metadataMessage = new ClientHttpResponseMessage((HttpWebResponse)request.GetResponse());

            using (var messageReader = new ODataMessageReader(metadataMessage, settings))
            {
                IEdmModel edmModel = messageReader.ReadMetadataDocument();

                foreach (var entity in edmModel.EntityContainer.EntitySets())
                {
                    string entityName = entity.Name; // entity name

                    IEdmCollectionType edmCollectionType = (IEdmCollectionType)entity.Type;
                    IEdmType edmType = edmCollectionType.ElementType.Definition;
                    IEdmStructuredType edmStructuredType = edmType as IEdmStructuredType;

                    foreach (IEdmProperty property in edmStructuredType.DeclaredProperties)
                    {
                        string propertyName = property.Name;

                        IEdmType edmType2 = property.Type.Definition;
                        var primitive = edmType2 as IEdmPrimitiveType;
                        string elementName = primitive.Name;


                    }
                }

            }
...