private object DeserializeValue(Type type)
{
_reader.SkipWhiteSpaces();
var isNullable = false;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>))
{
isNullable = true;
type = Nullable.GetUnderlyingType(type);
}
if (type == typeof(int))
{
return(_reader.ReadInt32(isNullable));
}
if (type == typeof(string))
{
return(_reader.ReadString());
}
if (type == typeof(double))
{
return(_reader.ReadDouble(isNullable));
}
if (type == typeof(DateTime))
{
return(_reader.ReadDateTime(isNullable));
}
if (_IEnumerableType.IsAssignableFrom(type))
{
return(DeserializeList(type));
}
if (type == typeof(char))
{
return(_reader.ReadChar());
}
if (type == typeof(bool))
{
return(_reader.ReadBool(isNullable));
}
if (type.IsEnum)
{
return(_reader.ReadEnum(type));
}
if (type == typeof(long))
{
return(_reader.ReadInt64(isNullable));
}
if (type == typeof(float))
{
return(_reader.ReadFloat(isNullable));
}
if (type == typeof(decimal))
{
return(_reader.ReadDecimal(isNullable));
}
if (type == typeof(short))
{
return(_reader.ReadInt16(isNullable));
}
if (type == typeof(object))
{
return(_reader.ReadObject());
}
return(ParseObject(type));
}