title: Newtonsoft.Json - Deserialize uppercase boolean values without quotes
body: <p>I receive some not really ISO conform Json content from an api. The boolean values are uppercase instead of lower case.</p>
  
  <pre><code>{ "Bool": False }
  </code></pre>
  
  <p>Initially, I thought that should be easy to solve by using a custom <code>JsonConverter</code> like shown in <a href="https://stackoverflow.com/questions/14524669/how-to-get-newtonsoft-to-deserialize-yes-and-no-to-boolean/14526161">how to get newtonsoft to deserialize yes and no to boolean</a>. </p>
  
  <p>But it looks like the <code>JsonConverter.ReadJson</code> method is never called. I think the reason is, that the value <code>False</code> is not in quotes and thus <code>JsonTextReader</code> never calls the converter and creates the exception. </p>
  
  <p>What would be the best way to handle that scenario?</p>
  
  <pre><code>public class BoolTests
  {
      public class A
      {
          [JsonConverter(typeof(CaseIgnoringBooleanConverter))]
          public bool Bool { get; set; }
      }
  
  
      [Theory]
      [InlineData(false, "{'Bool': false}")] //ok
      [InlineData(false, "{'Bool': 'False'}")] // ok
      [InlineData(false, "{'Bool': False")] // fails
      public void CasingMatters(bool expected, string json)
      {
          var actual = JsonConvert.DeserializeObject&lt;A&gt;(json);
          Assert.Equal(expected, actual.Bool);
      }
  }
  
  // taken from https://gist.github.com/randyburden/5924981
  public class CaseIgnoringBooleanConverter : JsonConverter
  {
      public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
      {
          switch (reader.Value.ToString().ToUpperInvariant().Trim())
          {
              case "TRUE":
                  return true;
              case "FALSE":
                  return false;
          }
  
          // If we reach here, we're pretty much going to throw an error so let's let Json.NET throw it's pretty-fied error message.
          return new JsonSerializer().Deserialize(reader, objectType);
      }
  
      public override bool CanConvert(Type objectType)
      {
          return objectType == typeof(bool);
      }
  
      public override bool CanWrite =&gt; false;
  
      public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
      {
          throw new NotImplementedException();
      }
  }
  </code></pre>