1

I have the following JSON object:

  {
    "entity": "Customer",
    "id": "XXX",
    "isActive": "1",
    "createdTime": "2018-01-30T18:56:51+02:00",
    "updatedTime": "2019-01-05T02:15:17+02:00",

and the following DTO class:

public class Customer
{
    public string Id { get; set; }
    public bool IsActive { get; set; }
    public DateTime CreatedTime { get; set; }
    public DateTime UpdatedTime { get; set; }
}

and code for deserialization:

        var jsonResponse = JObject.Parse(customerString);
        JToken array = jsonResponse["response_data"];
        List<Customer> result = (List<Customer>)array.ToObject(typeof(List<Customer>));

but I have a problem with IsActive property, because json object has 1 or 0 values, but I want to have boolean. How to write JsonSerializer to do it?

user2864740
  • 60,010
  • 15
  • 145
  • 220
Oleg Sh
  • 8,496
  • 17
  • 89
  • 159
  • 2
    Looks like a duplicate of [Convert an int to bool with Json.Net](https://stackoverflow.com/q/14427596) or [JSonNet boolean serialization](https://stackoverflow.com/q/9738324). Agree? – dbc Jan 05 '19 at 22:45
  • you are right, thank you – Oleg Sh Jan 05 '19 at 22:51

1 Answers1

2

Very nice code from Pete at how to get newtonsoft to deserialize yes and no to boolean

public class JsonBooleanConverter : JsonConverter
{
    public override bool CanWrite { get { return false; } }

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    throw new NotImplementedException();
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
    var value = reader.Value.ToString().ToLower().Trim();
    switch (value)
    {
        case "true":
        case "yes":
        case "y":
        case "1":
            return true;
    }
    return false;
}

public override bool CanConvert(Type objectType)
{
    if (objectType == typeof(Boolean))
    {
        return true;
    }
    return false;
}

}

Usage:

var myObj = JsonConvert.DeserializeObject<T>(json, new JsonBooleanConverter())
Manoj Choudhari
  • 5,277
  • 2
  • 26
  • 37