public virtual IEnumerable <string> GetProperties(JsonReader reader, JsonSerializerReader internalReader)
        {
            if (reader.TokenType != JsonToken.PropertyName)
            {
                reader.ReadAndMoveToContent();
            }
            bool finished = false;

            do
            {
                switch (reader.TokenType)
                {
                case JsonToken.PropertyName:
                    string memberName = reader.Value.ToString();
                    if (internalReader.CheckPropertyName(reader, memberName))
                    {
                        continue;
                    }
                    yield return(memberName);

                    break;

                case JsonToken.EndObject:
                    finished = true;
                    break;

                case JsonToken.Comment:
                    // ignore
                    break;

                default:
                    throw JsonSerializationException.Create(reader, "Unexpected token when deserializing object: " + reader.TokenType);
                }
            } while (!finished && reader.Read());
        }