prgtw / big-number-serializer-bundle

使用 JmsSerializer 将 BigNumber 类序列化和反序列化为字符串表示的包

1.1.0 2021-04-06 22:38 UTC

This package is auto-updated.

Last update: 2024-09-07 06:50:21 UTC


README

GitHub license Packagist GitHub Workflow Status

使用 BigNumber 将类序列化和反序列化为 string 表示的包,使用 JmsSerializer.

安装

  1. 在您的 composer.json 中要求 prgtw/big-number-serializer-bundle 包并更新您的依赖项。

    composer require prgtw/big-number-serializer-bundle
  2. BigNumberSerializerBundle 添加到您的应用程序内核中

    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"
}