microsoft-azure-storage/src/com/microsoft/azure/storage/table/TableDeserializer.java
@SuppressWarnings("unchecked")
    static <T extends TableEntity, R> ODataPayload<?> parseQueryResponse(final InputStream inStream,
            final TableRequestOptions options, Class<T> clazzType, final EntityResolver<R> resolver,
            final OperationContext opContext) throws InstantiationException, IllegalAccessException,
            StorageException, JsonParseException, IOException {
        ODataPayload<T> corePayload = null;
        ODataPayload<R> resolvedPayload = null;
        ODataPayload<?> commonPayload = null;

        JsonParser parser = createJsonParserFromStream(inStream);

        try {

            if (resolver != null) {
                resolvedPayload = new ODataPayload<R>();
                commonPayload = resolvedPayload;
            }
            else {
                corePayload = new ODataPayload<T>();
                commonPayload = corePayload;
            }

            if (!parser.hasCurrentToken()) {
                parser.nextToken();
            }

            JsonUtilities.assertIsStartObjectJsonToken(parser);

            // move into data  
            parser.nextToken();

            // if there is a clazz type and if JsonNoMetadata, create a classProperties dictionary to use for type inference once 
            // instead of querying the cache many times
            HashMap<String, PropertyPair> classProperties = null;
            if (options.getTablePayloadFormat() == TablePayloadFormat.JsonNoMetadata && clazzType != null) {
                classProperties = PropertyPair.generatePropertyPairs(clazzType);
            }

            while (parser.getCurrentToken() != null) {
                if (parser.getCurrentToken() == JsonToken.FIELD_NAME
                        && parser.getCurrentName().equals(ODataConstants.VALUE)) {
                    // move to start of array
                    parser.nextToken();

                    JsonUtilities.assertIsStartArrayJsonToken(parser);

                    // go to properties
                    parser.nextToken();

                    while (parser.getCurrentToken() == JsonToken.START_OBJECT) {
                        final TableResult res = parseJsonEntity(parser, clazzType, classProperties, resolver, options,
                                opContext);
                        if (corePayload != null) {
                            corePayload.tableResults.add(res);
                        }

                        if (resolver != null) {
                            resolvedPayload.results.add((R) res.getResult());
                        }
                        else {
                            corePayload.results.add((T) res.getResult());
                        }

                        parser.nextToken();
                    }

                    JsonUtilities.assertIsEndArrayJsonToken(parser);
                }

                parser.nextToken();
            }
        }
        finally {
            parser.close();
        }

        return commonPayload;
    }
@SuppressWarnings("unchecked")
    static <T extends TableEntity, R> ODataPayload<?> parseQueryResponse(final InputStream inStream,
            final TableRequestOptions options, Class<T> clazzType, final EntityResolver<R> resolver,
            final OperationContext opContext) throws InstantiationException, IllegalAccessException,
            StorageException, JsonParseException, IOException {
        ODataPayload<T> corePayload = null;
        ODataPayload<R> resolvedPayload = null;
        ODataPayload<?> commonPayload = null;

        JsonParser parser = createJsonParserFromStream(inStream);

        try {

            if (resolver != null) {
                resolvedPayload = new ODataPayload<R>();
                commonPayload = resolvedPayload;
            }
            else {
                corePayload = new ODataPayload<T>();
                commonPayload = corePayload;
            }

            if (!parser.hasCurrentToken()) {
                parser.nextToken();
            }

            JsonUtilities.assertIsStartObjectJsonToken(parser);

            // move into data  
            parser.nextToken();

            // if there is a clazz type and if JsonNoMetadata, create a classProperties dictionary to use for type inference once 
            // instead of querying the cache many times
            HashMap<String, PropertyPair> classProperties = null;
            if (options.getTablePayloadFormat() == TablePayloadFormat.JsonNoMetadata && clazzType != null) {
                classProperties = PropertyPair.generatePropertyPairs(clazzType);
            }

            while (parser.getCurrentToken() != null) {
                if (parser.getCurrentToken() == JsonToken.FIELD_NAME
                        && parser.getCurrentName().equals(ODataConstants.VALUE)) {
                    // move to start of array
                    parser.nextToken();

                    JsonUtilities.assertIsStartArrayJsonToken(parser);

                    // go to properties
                    parser.nextToken();

                    while (parser.getCurrentToken() == JsonToken.START_OBJECT) {
                        final TableResult res = parseJsonEntity(parser, clazzType, classProperties, resolver, options,
                                opContext);
                        if (corePayload != null) {
                            corePayload.tableResults.add(res);
                        }

                        if (resolver != null) {
                            resolvedPayload.results.add((R) res.getResult());
                        }
                        else {
                            corePayload.results.add((T) res.getResult());
                        }

                        parser.nextToken();
                    }

                    JsonUtilities.assertIsEndArrayJsonToken(parser);
                }

                parser.nextToken();
            }
        }
        finally {
            parser.close();
        }

        return commonPayload;
    }
@ SuppressWarnings ( "unchecked" ) static < T extends TableEntity , R > ODataPayload < ? > parseQueryResponse ( final InputStream inStream , final TableRequestOptions options , Class < T > clazzType , final EntityResolver < R > resolver , final OperationContext opContext ) throws InstantiationException , IllegalAccessException , StorageException , JsonParseException , IOException { ODataPayload < T > corePayload = null ; ODataPayload < R > resolvedPayload = null ; ODataPayload < ? > commonPayload = null ; JsonParser parser = createJsonParserFromStream ( inStream ) ; try { if ( resolver != null ) { resolvedPayload = new ODataPayload < R > ( ) ; commonPayload = resolvedPayload ; } else { corePayload = new ODataPayload < T > ( ) ; commonPayload = corePayload ; } if ( ! parser . hasCurrentToken ( ) ) { parser . nextToken ( ) ; } JsonUtilities . assertIsStartObjectJsonToken ( parser ) ; // move into data   parser . nextToken ( ) ; // if there is a clazz type and if JsonNoMetadata, create a classProperties dictionary to use for type inference once  // instead of querying the cache many times HashMap < String , PropertyPair > classProperties = null ; if ( options . getTablePayloadFormat ( ) == TablePayloadFormat . JsonNoMetadata && clazzType != null ) { classProperties = PropertyPair . generatePropertyPairs ( clazzType ) ; } while ( parser . getCurrentToken ( ) != null ) { if ( parser . getCurrentToken ( ) == JsonToken . FIELD_NAME && parser . getCurrentName ( ) . equals ( ODataConstants . VALUE ) ) { // move to start of array parser . nextToken ( ) ; JsonUtilities . assertIsStartArrayJsonToken ( parser ) ; // go to properties parser . nextToken ( ) ; while ( parser . getCurrentToken ( ) == JsonToken . START_OBJECT ) { final TableResult res = parseJsonEntity ( parser , clazzType , classProperties , resolver , options , opContext ) ; if ( corePayload != null ) { corePayload . tableResults . add ( res ) ; } if ( resolver != null ) { resolvedPayload . results . add ( ( R ) res . getResult ( ) ) ; } else { corePayload . results . add ( ( T ) res . getResult ( ) ) ; } parser . nextToken ( ) ; } JsonUtilities . assertIsEndArrayJsonToken ( parser ) ; } parser . nextToken ( ) ; } } finally { parser . close ( ) ; } return commonPayload ; }
Reserved for internal use. Parses the operation response as a collection of entities. Reads entity data from the
specified input stream using the specified class type and optionally projects each entity result with the
specified resolver into an {@link ODataPayload} containing a collection of {@link TableResult} objects.

@param inStream
The <code>InputStream</code> to read the data to parse from.
@param clazzType
The class type <code>T</code> implementing {@link TableEntity} for the entities returned. Set to
<code>null</code> to ignore the returned entities and copy only response properties into the
{@link TableResult} objects.
@param resolver
An {@link EntityResolver} instance to project the entities into instances of type <code>R</code>. Set
to <code>null</code> to return the entities as instances of the class type <code>T</code>.
@param options
A {@link TableRequestOptions} object that specifies execution options such as retry policy and timeout
settings for the operation.
@param opContext
An {@link OperationContext} object used to track the execution of the operation.
@return
An {@link ODataPayload} containing a collection of {@link TableResult} objects with the parsed operation
response.
@throws InstantiationException
if an error occurs while constructing the result.
@throws IllegalAccessException
if an error occurs in reflection while parsing the result.
@throws StorageException
if a storage service error occurs.
@throws IOException
if an error occurs while accessing the stream.
@throws JsonParseException
if an error occurs while parsing the stream.
Reserved for internal use . Parses the operation response as a collection of entities . Reads entity data from the specified input stream using the specified class type and optionally projects each entity result with the specified resolver into an { @link ODataPayload } containing a collection of { @link TableResult } objects .