Serialización de objetos de Entity Framework con una a muchas relaciones

Estoy intentando usar EF con Code First y la API web. No tengo ningún problema hasta que empiece a serializar las relaciones de muchos a muchos. Cuando intento ejecutar el siguiente método de api web, aparece el siguiente mensaje de error:

public class TagsController : ApiController
{

        private BlogDataContext db = new BlogDataContext();

        // GET api/Tags
        public IEnumerable<Tag> GetTags()
        {
            return db.Tags.AsEnumerable();
        }
}

Obtuve el siguiente error:

'System.Data.Entity.DynamicProxies.Tag_FF17EDDE6893000F7672649A39962DB0CA591C699DDB73E8C2A56203ED7C7B6D con el nombre del contrato de datos' Tag_FF17EDDE6893000F7672649A3Paque en la caja de la tarjeta de la tarjeta de la tarjeta de la tarjeta de la computadora de la manohttp://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' no se esperaba. Considere usar un DataContractResolver o agregue cualquier tipo que no se conozca estáticamente a la lista de tipos conocidos, por ejemplo, usando el atributo KnownTypeAttribute o agregándolos a la lista de tipos conocidos que se pasaron a DataContractSerializer.

He leído algunos artículos de SO (Articulo 1, Artículo 2) que la solución es agregar el siguiente atributo:

[DataContract (IsReference = true)]

pero esto no ha tenido efecto. También el uso de [IgnoreDataMember] no tiene un efecto. La única opción que parece funcionar es establecer Configuration.ProxyCreationEnabled en false. Es esta mi única opción? ¿Me estoy perdiendo de algo?

Ejemplos de objetos POCO:

Etiqueta

[DataContract(IsReference = true)]
public class Tag
{
        public Tag()
        {
            this.Blogs = new HashSet<Blog>();
        }

        [Key]
        [DataMember]
        public int Id { get; set; }

        [DataMember]
        public string Name { get; set; }

        [IgnoreDataMember]
        public virtual ICollection<Blog> Blogs { get; set; }
}

Blog

[DataContract(IsReference = true)]
public class Blog
{
    public Blog()
    {
        this.Tags = new HashSet<Tag>();
    }

    [Key]
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }

    [IgnoreDataMember]
    public virtual ICollection<Tag> Tags { get; set; }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta