NOTE: I have provided the solution at the bottom of this feed.
I have a C# Win 8 app where I'm de-serializing some json that looks like this:
{
'Unit': [
{
'name':'House 123',
isAvailable:'no'
},
{
'name':'House 456',
isAvailable:'yes'
}]
}
into a class that uses this interface:
public interface IUnit
{
string Name { get; }
bool isAvailable { get; }
}
But Newtonsoft throws an error:
Unexpected character encountered while parsing value: n. Path 'Unit[0].isAvailable, line 1, position 42.
Is there a way to extend Newtonsoft to parse yes/no or 1/0 based on the resulting object property type of bool? Right now it only works for true/false.
There are several posts on custom converters for classes, but not a primitive type like bool.
Any suggestions?
public class MyBooleanConverter : 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;
if (value == null || String.IsNullOrWhiteSpace(value.ToString()))
{
return false;
}
if ("yes".Equals(value, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public override bool CanConvert(Type objectType)
{
if (objectType == typeof(String) || objectType == typeof(Boolean))
{
return true;
}
return false;
}
}
public interface IUnit
{
string Name { get; }
[JsonConverter(typeof(MyBooleanConverter))]
bool isAvailable { get; }
}