¿Cómo puedo omitir la serialización de matriz de JavaScript predeterminada para los tipos IEnumerable en Json.Net?

Algunos tipos personalizados que implementan IEnumerable no necesariamente tienen colecciones de respaldo. Se podrían generar dinámicamente, por ejemplo, utilizando 'rendimiento' o LINQ. Aquí hay un ejemplo:

public class SOJsonExample
{
    public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>>
    {
        public List<int> Keys { get; set; }
        public List<float> Values { get; set; }

        public MyCustomEnumerable()
        {
            Keys = new List<int> { 1, 2, 3 };
            Values = new List<float> { 0.1f, 0.2f, 0.3f };
        }

        public IEnumerator<KeyValuePair<int, float>> GetEnumerator()
        {
            var kvps =
                from key in Keys
                from value in Values
                select new KeyValuePair<int, float>(key, value);

            return kvps.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator();
        }
    }
}

Descubrí que la serialización predeterminada de Json.NET es enumerar cada valor y almacenar los valores en una matriz de JavaScript (que no quiero). El deserializador predeterminado no podrá deserializar la colección ya que no se puede completar. En estos casos, me gustaría que Json.NET omita la serialización de la matriz de JavaScript predeterminada y que solo almacene los miembros de la clase.

Lo único que quiero son mis claves y valores: ¿hay algún método abreviado para hacer esto o tengo que implementar mi propio serializador personalizado?

Comprobadoesta yesta, ninguno de los cuales es exactamente mi pregunta. Escaneadola documentación también, pero no encontré lo que estaba buscando (quizás busqué en el lugar equivocado).

(Edición # 1 - claridad mejorada)

(Edición # 2 - respondí mi propia pregunta ... ver más abajo)

Respuestas a la pregunta(1)

Su respuesta a la pregunta