title: Gson: Deserialize Json into Abstract Class
body: <p>I have json that contains:</p>
  
  <pre><code>{"timeZone": "America/Los_Angeles"}
  </code></pre>
  
  <p>among many other keys, and I want to deserialize it into <code>java.util.TimeZone</code>. <code>TimeZone</code> is just a field in a class that I want to instantiate with this json.</p>
  
  <p>The issue is that <code>TimeZone</code> is an abstract class and it should be instantiated with:</p>
  
  <pre><code>public static synchronized TimeZone getTimeZone(String ID) {
          return getTimeZone(ID, true);
  </code></pre>
  
  <p>which uses a concrete class <code>ZoneInfo</code> to instantiate. The deserializer, however, calls the constructor of <code>TimeZone</code> by default. So I got:</p>
  
  <pre><code>java.lang.RuntimeException: Failed to invoke public java.util.TimeZone() with no args
  </code></pre>
  
  <p>I wonder how to configure Gson to instantiate a <code>TimeZone</code> from the above json?</p>