title: ModelState validation in Web Api when default formatter is servicestack
body: <p>I have WEB.API controller which use attribute for modelstate validation, when I use default serializer of WEB API every thing works fine, but when I change it to servicestack required attribute for bool values and EnumDataType(typeof(VehicleType)) does not work. I mean It shows that model state is valid regarding It's not, I configured servicestack this way:
  In Owin startup:</p>
  
  <pre><code>private void ConfigureServicestack(HttpConfiguration config)
  {
      config.Formatters.RemoveAt(0);
      config.Formatters.Insert(0, new ServiceStackTesxtFormatter());
  }
  </code></pre>
  
  <p>and this class for servicestack:</p>
  
  <pre><code>public class ServiceStackTextFormatter : MediaTypeFormatter
  {
      public ServiceStackTextFormatter()
      {
          JsConfig.ConvertObjectTypesIntoStringDictionary = true;
          SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
  
          SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true));
          SupportedEncodings.Add(new UnicodeEncoding(bigEndian: false, byteOrderMark: true, throwOnInvalidBytes: true));
      }
  
      public override bool CanReadType(Type type)
      {
          if (type == null) throw new ArgumentNullException("type");
          return true;
      }
  
      public override bool CanWriteType(Type type)
      {
          if (type == null) throw new ArgumentNullException("type");
          return true;
      }
  
      public override Task&lt;object&gt; ReadFromStreamAsync(Type type, Stream readStream, System.Net.Http.HttpContent content, IFormatterLogger formatterLogger)
      {
          var task = Task&lt;object&gt;.Factory.StartNew(() =&gt; JsonSerializer.DeserializeFromStream(type, readStream));
          return task;
      }
  
      public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, System.Net.Http.HttpContent content, TransportContext transportContext)
      {
          var task = Task.Factory.StartNew(() =&gt; JsonSerializer.SerializeToStream(value, type, writeStream));
          return task;
      }
  }
  </code></pre>
  
  <p>my controller input is like this:</p>
  
  <pre><code>        public class PostRequest 
      {
  
  //this is custom attribute and works fine
          [Number]
          public string VehicleId{ get; set; }
  
  //It works fine for string value
          [Required]
          public string CompanyWebSiteAddress{ get; set; }
  
  //when I insert invalid vehicletype modelstate.isvalid is true
  
          [EnumDataType(typeof(VehicleType))]
          public VehicleType VehicleType{ get; set; }
  
  //for this bool value when I dont send IsOwner modelstate.Isvalid is true also
          [Required]
          public bool IsOwner { get; set; }
  }
  </code></pre>
  
  <p>The Odd issue is when I remove ConfigureServicestack from my application startup every thing works fine, I thought maybe If one of Properties is null or is not provided by client servicestack desalinize it as default value for example for IsOwner set it like:"IsOwner":false, but I don't know If it's correct or how can  I turn off this feature</p>