How to efficiently parse JSON object to extract structure in c#, *ignoring property values*

I need to be able to parse the top-level structure of a JSON object to a string, but ignore the values in the properties, so that I can build up a distinct list of the payload structures coming through in RabbitMQ messages.

Note: the variety of payload structures means that I cannot preempt the structure of the objects and therefore cannot deserialise into preexisting concrete classes.

e.g. Given the object...

{ 
'SomeInt': 5, 
'AString': 'blah',
'MyList': ['tom', 'dick', 'harry'],
'AnObject': { 'something': 'else' }
}

...I need to be able to get...

{ 
'SomeInt': 'Int', 
'AString': 'String',
'MyList': 'Array of String',
'AnObject': 'Object'
}

The following code does do this by iterating the source object and creating an equivalent target object but with the property type as the target value...

        JObject newObject = new JObject();
        dynamic payload = JObject.Parse(businessObject.Payload);
<snip>
        foreach (var property in (JObject)payload)
        {
            if ((property.Value.HasValues)
            && (property.Value.Type == JTokenType.Array)
            && (property.Value.HasValues))
            {
                newObject.Add(property.Key,
                    "Array of " + property.Value.First.Type);
                <snip>
            }

            else
            {
                newObject.Add(property.Key,
                                property.Value.Type.ToString());
                <snip>
            }
        }

        return newObject.ToString();

...but it's slow. I need to be able to increase the speed by about a factor of five to be able to handle the message throughput.

Can anyone suggest a library or alternative approach to get better speed out of this.