title: Why can I not deserialize this custom struct using Json.Net?
body: <p>I have a struct representing a DateTime which also has zone info as below:</p>
  
  <pre><code>public struct DateTimeWithZone
  {
      private readonly DateTime _utcDateTime;
      private readonly TimeZoneInfo _timeZone;    
      public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, 
                          DateTimeKind kind = DateTimeKind.Utc)
      {
          dateTime = DateTime.SpecifyKind(dateTime, kind);        
          _utcDateTime = dateTime.Kind != DateTimeKind.Utc 
                        ? TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone) 
                        : dateTime;
          _timeZone = timeZone;
      }    
      public DateTime UniversalTime { get { return _utcDateTime; } }
      public TimeZoneInfo TimeZone { get { return _timeZone; } }
      public DateTime LocalTime 
      { 
          get 
          { 
              return TimeZoneInfo.ConvertTime(_utcDateTime, _timeZone); 
          } 
      }
  }
  </code></pre>
  
  <p>I can serialize the object using:</p>
  
  <pre><code>var now = DateTime.Now;
  var dateTimeWithZone = new DateTimeWithZone(now, TimeZoneInfo.Local, DateTimeKind.Local);
  var serializedDateTimeWithZone = JsonConvert.SerializeObject(dateTimeWithZone);
  </code></pre>
  
  <p>But when I deserialize it using the below, I get an invalid DateTime value (DateTime.MinValue)</p>
  
  <pre><code>var deserializedDateTimeWithZone = JsonConvert.DeserializeObject&lt;DateTimeWithZone&gt;(serializedDateTimeWithZone);
  </code></pre>
  
  <p>Any help is much appreciated.</p>