title: Using NodaTime Instant in WebAPI model always fails validation
body: <p>One of the models for my WebAPI v4 endpoint has a field of type <code>NodaTime.Instant</code>. Model validation always reports that this fails (<code>Model.IsValid == false</code>), with the error message "Unexpected token parsing Instant. Expected String, got Date." which is clearly coming from <a href="https://code.google.com/p/noda-time/source/browse/src/NodaTime.Serialization.JsonNet/NodaDateTimeZoneConverter.cs?spec=svn894f8499b0556e5bd27dd2694c88ef0dc349ba88&amp;r=894f8499b0556e5bd27dd2694c88ef0dc349ba88" rel="nofollow">NodaTime</a>. </p>
  
  <p>The request message does in fact pass the <code>Instant</code> as a string containing an ISO-8601 date, so it must be getting parsed to a BCL <code>DateTime</code> at some point before NodaTime gets it. I tried using <code>OffsetDateTime</code> and <code>LocalDateTime</code>, but got similar errors in each case. </p>
  
  <p>So what should I do here? Should I pass something other than an <code>Instant</code>? Is there some other way to handle the parsing or validation that won't cause this error? </p>
  
  <p>I've included a minimal repro below. It should fail if you POST to it with a request body like <code>{"SomeInstant":"2013-08-13T17:51:22.1705292Z"}</code></p>
  
  <pre><code>using System.Collections.Generic;
  using System.ComponentModel.DataAnnotations;
  using System.Net;
  using System.Net.Http;
  using System.Web.Http;
  using NodaTime;
  
  namespace TestProject.Controllers
  {
      /** Assume that we called GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ConfigureForNodaTime(DateTimeZoneProviders.Bcl) in Global.asax.cs **/
      public class NodaTimeController : ApiController
      {
          public Instant Post(TestModel m)
          {
              //ModelState.IsValid is always false due to error parsing the Instant field
              if (!ModelState.IsValid)
              {
                  throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
              }
              return m.SomeInstant;
          }
      }
  
      public class TestModel
      {
          public Instant SomeInstant { get; set; }
      }
  }
  </code></pre>