title: Overriding @JsonTypeInfo not working when using it for class field like List<Animal> where Animal is annotated with it
body: <p>Friends,</p>
  
  <p>I am facing issues in overriding <strong>@JsonTypeInfo</strong> annotation in specific scenarios.</p>
  
  <p>Please find my class structures as below.</p>
  
  <pre><code>@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY,    
  property = "@type")
  class Animal {
      public String name = "animalName";
  
      /**
       * @return the name
       */ 
      public String getName() {
     return name;
      }
  
      /**
       * @param name
       *            the name to set
       */
  
      public void setName(String name) {
      this.name = name;
      }
  
  }
  
  class Cat extends Animal {
  boolean likesCream = true;
  public int lives = 10;
  
  /*
   * (non-Javadoc)
   * 
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
  return "Cat [likesCream=" + likesCream + ", lives=" + lives + ", name="
      + name + "]";
  }
  
  /**
   * @return the likesCream
   */
  public boolean isLikesCream() {
  return likesCream;
  }
  
  /**
   * @param likesCream
   *            the likesCream to set
   */
  public void setLikesCream(boolean likesCream) {
  this.likesCream = likesCream;
  }
  
  /**
   * @return the lives
   */
  public int getLives() {
  return lives;
  }
  
  /**
   * @param lives
   *            the lives to set
   */
  public void setLives(int lives) {
  this.lives = lives;
  }
  
  }
  
  class Dog extends Animal {
  public double barkVolume; // in decibels
  
  /*
   * (non-Javadoc)
   * 
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
  return "Dog [barkVolume=" + barkVolume + ", name=" + name + "]";
  }
  
  /**
   * @return the barkVolume
   */
  public double getBarkVolume() {
  return barkVolume;
  }
  
  /**
   * @param barkVolume
   *            the barkVolume to set
   */
  public void setBarkVolume(double barkVolume) {
  this.barkVolume = barkVolume;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Now I am using above classses in my <strong>Zoo</strong> class which I need to serialize/deserialize.</p>
  
  <pre><code>class Zoo2i {
  
      List&lt;Animal&gt; animals;
  
      Dog dog;
  
      /**
       * @return the animals
       */
      public List&lt;Animal&gt; getAnimals() {
      return animals;
      }
  
      /**
       * @param animals
       *            the animals to set
       */
      @JsonTypeInfo(use = JsonTypeInfo.Id.NONE, include = JsonTypeInfo.As.PROPERTY,    
                   property = "@type")
     public void setAnimals(List&lt;Animal&gt; animals) {
     this.animals = animals;
     }
  
      /**
       * @return the dog
       */
      public Dog getDog() {
      return dog;
      }
  
      /**
       * @param dog
       *            the dog to set
       */
      @JsonTypeInfo(use = JsonTypeInfo.Id.NONE, include = JsonTypeInfo.As.PROPERTY,    
                    property = "@type")
       public void setDog(Dog dog) {
      this.dog = dog;
      }
  }
  </code></pre>
  
  <p>As I have annotated Animal class , it will add type info by default to all its subclasses to support polymorphism.</p>
  
  <p>List can have all types e.g Animal, Dog , Cat.
  My requirement is that I do not want type information for Animal instance itself in List and for other property of type Dog in zoo2i class.</p>
  
  <p>I am succeeded in overriding annotation for setDog(....) but failed for setAnimals(...) (plz see Zoo2i class).</p>
  
  <p>Is there any different way to exclude type information for annotated class itself or to make type information optional(not mandatory) during deserialization.</p>
  
  <p>One more thing that by default , Animal and all its instances are used, type info is included as Animal is annotated, I want that only when I use directly Cat , Dog then type information should not be included and should not be expected during deserialization;</p>