diff --git a/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php b/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php index cf4a89ca1ab5f..27f749b637bf0 100644 --- a/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php @@ -23,10 +23,10 @@ class JsonEncoder implements EncoderInterface, DecoderInterface protected $encodingImpl; protected $decodingImpl; - public function __construct(JsonEncode $encodingImpl = null, JsonDecode $decodingImpl = null) + public function __construct(JsonEncode $encodingImpl = null, JsonDecode $decodingImpl = null, array $defaultContext = []) { - $this->encodingImpl = $encodingImpl ?? new JsonEncode(); - $this->decodingImpl = $decodingImpl ?? new JsonDecode([JsonDecode::ASSOCIATIVE => true]); + $this->encodingImpl = $encodingImpl ?? new JsonEncode($defaultContext); + $this->decodingImpl = $decodingImpl ?? new JsonDecode(array_merge([JsonDecode::ASSOCIATIVE => true], $defaultContext)); } /** diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php index c1d7d496cce71..6cd1f82b1ab6c 100644 --- a/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php +++ b/src/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php @@ -66,6 +66,22 @@ public function testOptions() $this->assertEquals($expected, $this->serializer->serialize($arr, 'json'), 'Context should not be persistent'); } + public function testWithDefaultContext() + { + $defaultContext = [ + 'json_encode_options' => \JSON_UNESCAPED_UNICODE, + 'json_decode_associative' => false, + ]; + + $encoder = new JsonEncoder(null, null, $defaultContext); + + $data = new \stdClass(); + $data->msg = '你好'; + + $this->assertEquals('{"msg":"你好"}', $json = $encoder->encode($data, 'json')); + $this->assertEquals($data, $encoder->decode($json, 'json')); + } + public function testEncodeNotUtf8WithoutPartialOnError() { $this->expectException(UnexpectedValueException::class);