public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
Guard.NotNull(reader, "reader");
Guard.NotNull(objectType, "objectType");
var isNullable = objectType.IsGenericType;
var result = (IJsonSerializable)Activator.CreateInstance(isNullable ? objectType.GetGenericArguments()[0] : objectType);
switch (reader.TokenType)
{
// Empty value for null-ables.
case JsonToken.Null:
if (isNullable) { return null; }
result.FromJson();
break;
// A number without digits.
case JsonToken.Integer:
result.FromJson((long)reader.Value);
break;
// A number with digits.
case JsonToken.Float:
result.FromJson((double)reader.Value);
break;
// A string.
case JsonToken.String:
result.FromJson((string)reader.Value);
break;
// Other scenario's are not supported.
default:
throw new JsonSerializationException(string.Format(CultureInfo.CurrentCulture, QowaivMessages.JsonSerialization_TokenNotSupported, objectType.FullName, reader.TokenType));
}
return result;
}