/// <summary>
            /// Read parameters as the message content.
            /// </summary>
            /// <param name="messageReader">The message reader to use for reading.</param>
            /// <param name="functionImport">The function import to pass to the parameter reader.</param>
            /// <returns>A ComplexInstance representing parameters.</returns>
            public object ReadParameters(ODataMessageReaderTestWrapper messageReader, IEdmOperationImport functionImport)
            {
                // TODO: ODataLib test item: Add new ODataPayloadElement for parameters payload
                ODataParameterReader parameterReader = messageReader.CreateODataParameterReader(functionImport);
                ODataParameters odataParameters = new ODataParameters();
                List<ODataProperty> parameters = new List<ODataProperty>();
                try
                {
                    // read the start of the parameters
                    this.assert.AreEqual(ODataParameterReaderState.Start, parameterReader.State, "Reader states don't match.");
                    while (parameterReader.Read())
                    {
                        switch (parameterReader.State)
                        {
                            case ODataParameterReaderState.Value:
                                odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, parameterReader.Value));
                                break;

                            case ODataParameterReaderState.Entry:
                                ODataReader entryReader = parameterReader.CreateEntryReader();
                                entryReader.Read();
                                this.assert.AreEqual(ODataReaderState.EntryStart, entryReader.State, "Reader states don't match.");
                                odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, this.ReadEntry(entryReader)));
                                this.assert.AreEqual(ODataReaderState.EntryEnd, entryReader.State, "Reader states don't match.");
                                this.assert.IsFalse(entryReader.Read(), "Read() should return false after EntryEnd.");
                                this.assert.AreEqual(ODataReaderState.Completed, entryReader.State, "Reader states don't match.");
                                break;

                            case ODataParameterReaderState.Feed:
                                ODataReader feedReader = parameterReader.CreateFeedReader();
                                feedReader.Read();
                                this.assert.AreEqual(ODataReaderState.FeedStart, feedReader.State, "Reader states don't match.");
                                odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, this.ReadFeed(feedReader)));
                                this.assert.AreEqual(ODataReaderState.FeedEnd, feedReader.State, "Reader states don't match.");
                                this.assert.IsFalse(feedReader.Read(), "Read() should return false after EntryEnd.");
                                this.assert.AreEqual(ODataReaderState.Completed, feedReader.State, "Reader states don't match.");
                                break;

                            case ODataParameterReaderState.Collection:
                                ODataCollectionReader collectionReader = parameterReader.CreateCollectionReader();
                                odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, this.ReadCollection(collectionReader)));
                                break;

                            default:
                                this.assert.Fail("Unexpected state: " + parameterReader.State);
                                break;
                        }
                    }

                    this.assert.AreEqual(ODataParameterReaderState.Completed, parameterReader.State, "Reader states don't match.");

                    return odataParameters;
                }
                catch (Exception e)
                {
                    if (ExceptionUtilities.IsCatchable(e))
                    {
                        this.assert.AreEqual(ODataParameterReaderState.Exception, parameterReader.State, "Expected the reader to be in 'Exception' state.");
                    }

                    throw;
                }
            }