Bundle for serializing BigNumber classes to/from string
representation using JmsSerializer.
-
Require the
prgtw/big-number-serializer-bundle
package in yourcomposer.json
and update your dependencies.composer require prgtw/big-number-serializer-bundle
-
Add the
BigNumberSerializerBundle
to your application's kernel:public function registerBundles() { $bundles = [ // ... new prgTW\BigNumberSerializerBundle(), // ... ]; // ... }
/**
* @Serializer\ExclusionPolicy("NONE")
*/
class Temp
{
/**
* @Serializer\SerializedName("integer")
* @Serializer\Type("Brick\Math\BigInteger")
*/
private BigInteger $integer;
/**
* @Serializer\SerializedName("decimal")
* @Serializer\Type("Brick\Math\BigDecimal<'2'>")
*/
private BigDecimal $decimal;
/**
* @Serializer\SerializedName("rational")
* @Serializer\Type("Brick\Math\BigRational")
*/
private BigRational $rational;
public function __construct(BigInteger $integer, BigDecimal $decimal, BigRational $rational)
{
$this->integer = $integer;
$this->decimal = $decimal;
$this->rational = $rational;
}
public function getInteger(): BigInteger
{
return $this->integer;
}
public function getDecimal(): BigDecimal
{
return $this->decimal;
}
public function getRational(): BigRational
{
return $this->rational;
}
}
// ----------------------------------------
$temp = new Temp(
BigInteger::of('12345'),
BigDecimal::of('123.4'), // scaled to 2 decimal places
BigRational::of('4/7')
);
echo $jmsSerializer->serialize($temp, 'json');
{
"integer": {"value": "12345"},
"decimal": {"value": "12340", "scale": 2},
"rational": {"numerator": {"value":"4"}, "denominator": {"value":"7"}}
}
{
"integer": "12345",
"decimal": "123.40",
"rational": "4\/7"
}