public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.Null) { if (this.primitiveTypeCode == TypeCode.String) { return(null); } throw new UnexpectedToken(reader, JsonToken.Boolean, JsonToken.DateTime, JsonToken.Null, JsonToken.Number, JsonToken.StringLiteral); } var value = default(object); switch (primitiveTypeCode) { case TypeCode.Boolean: value = reader.ReadBoolean(false); break; case TypeCode.Byte: value = reader.ReadByte(false); break; case TypeCode.DateTime: value = reader.ReadDateTime(false); break; case TypeCode.Decimal: value = reader.ReadDecimal(false); break; case TypeCode.Double: value = reader.ReadDouble(false); break; case TypeCode.Int16: value = reader.ReadInt16(false); break; case TypeCode.Int32: value = reader.ReadInt32(false); break; case TypeCode.Int64: value = reader.ReadInt64(false); break; case TypeCode.SByte: value = reader.ReadSByte(false); break; case TypeCode.Single: value = reader.ReadSingle(false); break; case TypeCode.UInt16: value = reader.ReadUInt16(false); break; case TypeCode.UInt32: value = reader.ReadUInt32(false); break; case TypeCode.UInt64: value = reader.ReadUInt64(false); break; default: var valueStr = reader.ReadString(false); value = Convert.ChangeType(valueStr, this.primitiveType, reader.Context.Format); break; } return(value); }