Exemplo n.º 1
0
        private ParameterReaderResult RunParameterReaderTest(string payload)
        {
            var message = new InMemoryMessage();

            message.Stream = new MemoryStream(Encoding.UTF8.GetBytes(payload));
            message.SetHeader("Content-Type", "application/json");

            var parameterReaderResult = new ParameterReaderResult();
            using (var messageReader = new ODataMessageReader((IODataRequestMessage)message, null, this.model))
            {
                var parameterReader = messageReader.CreateODataParameterReader(this.action);

                while (parameterReader.Read())
                {
                    switch (parameterReader.State)
                    {
                        case ODataParameterReaderState.Value:
                        {
                            parameterReaderResult.Values.Add(new KeyValuePair<string, object>(parameterReader.Name, parameterReader.Value));
                            break;
                        }
                        case ODataParameterReaderState.Collection:
                        {
                            var collection = new ParameterReaderCollection();
                            parameterReaderResult.Collections.Add(new KeyValuePair<string, ParameterReaderCollection>(parameterReader.Name, collection));
                            var collectionReader = parameterReader.CreateCollectionReader();
                            while (collectionReader.Read())
                            {
                                switch (collectionReader.State)
                                {
                                    case ODataCollectionReaderState.Value:
                                    {
                                        collection.Items.Add(collectionReader.Item);
                                        break;
                                    }
                                }
                            }
                            break;
                        }
                        case ODataParameterReaderState.Entry:
                        {
                            var entryReader = parameterReader.CreateEntryReader();

                            var entryList = new List<ODataEntry>();
                            parameterReaderResult.Entries.Add(new KeyValuePair<string, IList<ODataEntry>>(parameterReader.Name, entryList));
                            while (entryReader.Read())
                            {
                                switch (entryReader.State)
                                {
                                    case ODataReaderState.EntryEnd:
                                        entryList.Add((ODataEntry)entryReader.Item);
                                        break;

                                }
                            }
                            break;
                        }
                        case ODataParameterReaderState.Feed:
                        {
                            var entryReader = parameterReader.CreateFeedReader();
                            
                            var entryList = new List<ODataEntry>();
                            parameterReaderResult.Entries.Add(new KeyValuePair<string, IList<ODataEntry>>(parameterReader.Name, entryList));

                            var feedList = new List<ODataFeed>();
                            parameterReaderResult.Feeds.Add(new KeyValuePair<string, IList<ODataFeed>>(parameterReader.Name, feedList));

                            while (entryReader.Read())
                            {
                                switch (entryReader.State)
                                {
                                    case ODataReaderState.EntryEnd:
                                        entryList.Add((ODataEntry)entryReader.Item);
                                        break;
                                    case ODataReaderState.FeedEnd:
                                        feedList.Add((ODataFeed)entryReader.Item);
                                        break;
                                }
                            }
                            break;
                        }
                    }
                }
            }

            return parameterReaderResult;
        }
        private ParameterReaderResult RunParameterReaderTest(string payload)
        {
            var message = new InMemoryMessage();

            message.Stream = new MemoryStream(Encoding.UTF8.GetBytes(payload));
            message.SetHeader("Content-Type", "application/json");

            var parameterReaderResult = new ParameterReaderResult();

            using (var messageReader = new ODataMessageReader((IODataRequestMessage)message, null, this.model))
            {
                var parameterReader = messageReader.CreateODataParameterReader(this.action);

                while (parameterReader.Read())
                {
                    switch (parameterReader.State)
                    {
                    case ODataParameterReaderState.Value:
                    {
                        parameterReaderResult.Values.Add(new KeyValuePair <string, object>(parameterReader.Name, parameterReader.Value));
                        break;
                    }

                    case ODataParameterReaderState.Collection:
                    {
                        var collection = new ParameterReaderCollection();
                        parameterReaderResult.Collections.Add(new KeyValuePair <string, ParameterReaderCollection>(parameterReader.Name, collection));
                        var collectionReader = parameterReader.CreateCollectionReader();
                        while (collectionReader.Read())
                        {
                            switch (collectionReader.State)
                            {
                            case ODataCollectionReaderState.Value:
                            {
                                collection.Items.Add(collectionReader.Item);
                                break;
                            }
                            }
                        }
                        break;
                    }

                    case ODataParameterReaderState.Entry:
                    {
                        var entryReader = parameterReader.CreateEntryReader();

                        var entryList = new List <ODataEntry>();
                        parameterReaderResult.Entries.Add(new KeyValuePair <string, IList <ODataEntry> >(parameterReader.Name, entryList));
                        while (entryReader.Read())
                        {
                            switch (entryReader.State)
                            {
                            case ODataReaderState.EntryEnd:
                                entryList.Add((ODataEntry)entryReader.Item);
                                break;
                            }
                        }
                        break;
                    }

                    case ODataParameterReaderState.Feed:
                    {
                        var entryReader = parameterReader.CreateFeedReader();

                        var entryList = new List <ODataEntry>();
                        parameterReaderResult.Entries.Add(new KeyValuePair <string, IList <ODataEntry> >(parameterReader.Name, entryList));

                        var feedList = new List <ODataFeed>();
                        parameterReaderResult.Feeds.Add(new KeyValuePair <string, IList <ODataFeed> >(parameterReader.Name, feedList));

                        while (entryReader.Read())
                        {
                            switch (entryReader.State)
                            {
                            case ODataReaderState.EntryEnd:
                                entryList.Add((ODataEntry)entryReader.Item);
                                break;

                            case ODataReaderState.FeedEnd:
                                feedList.Add((ODataFeed)entryReader.Item);
                                break;
                            }
                        }
                        break;
                    }
                    }
                }
            }

            return(parameterReaderResult);
        }