diff --git a/core/composer.lock b/core/composer.lock
index 7d2a9431bf3c41617484e8261109dbc35f3d5b22..18db64de4a71d52abdf9dd641af60f1696f505b1 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -811,18 +811,18 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Serializer",
-                "reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0"
+                "reference": "45fe843e3144a594f93a6a372385c6534c7df31c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/symfony/Serializer/archive/ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0.zip",
-                "reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0",
+                "url": "https://github.com/symfony/Serializer/archive/45fe843e3144a594f93a6a372385c6534c7df31c.zip",
+                "reference": "45fe843e3144a594f93a6a372385c6534c7df31c",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "time": "2012-12-19 07:09:49",
+            "time": "2013-01-19 07:50:02",
             "type": "library",
             "extra": {
                 "branch-alias": {
diff --git a/core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php b/core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php
index 06a54158fa8d6c35ffda0493060460806940658a..642352d307b155fb2d44e87aaddafd4e0068ddb0 100644
--- a/core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php
+++ b/core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php
@@ -32,7 +32,7 @@ class ComplexDataNormalizer extends NormalizerBase {
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize().
    */
-  public function normalize($object, $format = NULL) {
+  public function normalize($object, $format = NULL, array $context = array()) {
     $attributes = array();
     foreach ($object as $name => $field) {
       $attributes[$name] = $this->serializer->normalize($field, $format);
diff --git a/core/lib/Drupal/Core/Serialization/ListNormalizer.php b/core/lib/Drupal/Core/Serialization/ListNormalizer.php
index ee20fb64e5bf1bf3db09753fbbbe14848f0f25e0..d590b7b55d6dd413b75ddf66cf2c3e23ccff866c 100644
--- a/core/lib/Drupal/Core/Serialization/ListNormalizer.php
+++ b/core/lib/Drupal/Core/Serialization/ListNormalizer.php
@@ -31,7 +31,7 @@ class ListNormalizer extends NormalizerBase {
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize().
    */
-  public function normalize($object, $format = NULL) {
+  public function normalize($object, $format = NULL, array $context = array()) {
     $attributes = array();
     foreach ($object as $fieldItem) {
       $attributes[] = $this->serializer->normalize($fieldItem, $format);
diff --git a/core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php b/core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php
index 0376771e3d1a23323d1c61b5153d1625bea5bba5..cf2a8795fafdf3899c7423ce0267c249e3a3d571 100644
--- a/core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php
+++ b/core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php
@@ -25,7 +25,7 @@ class TypedDataNormalizer extends NormalizerBase {
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize().
    */
-  public function normalize($object, $format = NULL) {
+  public function normalize($object, $format = NULL, array $context = array()) {
     return $object->getValue();
   }
 
diff --git a/core/lib/Drupal/Core/Serialization/XmlEncoder.php b/core/lib/Drupal/Core/Serialization/XmlEncoder.php
index 7235af3aa7a60aeea7cbf7d9c3056b0e9c900339..d79a6d94234a7e20c66e0c1af288735de33f72a5 100644
--- a/core/lib/Drupal/Core/Serialization/XmlEncoder.php
+++ b/core/lib/Drupal/Core/Serialization/XmlEncoder.php
@@ -44,9 +44,9 @@ public function __construct() {
   /**
    * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::encode().
    */
-  public function encode($data, $format){
-    $normalized = $this->serializer->normalize($data, $format);
-    return $this->baseEncoder->encode($normalized, $format);
+  public function encode($data, $format, array $context = array()){
+    $normalized = $this->serializer->normalize($data, $format, $context);
+    return $this->baseEncoder->encode($normalized, $format, $context);
   }
 
   /**
@@ -59,8 +59,8 @@ public function supportsEncoding($format) {
   /**
    * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::decode().
    */
-  public function decode($data, $format){
-    return $this->baseEncoder->decode($data, $format);
+  public function decode($data, $format, array $context = array()){
+    return $this->baseEncoder->decode($data, $format, $context);
   }
 
   /**
diff --git a/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityNormalizer.php b/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityNormalizer.php
index b28653902a9af312422e9006dc542ca7c5c85b0c..ab662b32e892739596c17086993ffac1b5a1f969 100644
--- a/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityNormalizer.php
+++ b/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityNormalizer.php
@@ -27,7 +27,7 @@ class JsonldEntityNormalizer extends JsonldNormalizerBase implements Denormalize
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
    */
-  public function normalize($entity, $format = NULL) {
+  public function normalize($entity, $format = NULL, array $context = array()) {
     $entity_wrapper = new JsonldEntityWrapper($entity, $format, $this->serializer, $this->siteSchemaManager);
 
     $attributes = $entity_wrapper->getProperties();
@@ -43,7 +43,7 @@ public function normalize($entity, $format = NULL) {
    *
    * @throws \Symfony\Component\Serializer\Exception\UnexpectedValueException
    */
-  public function denormalize($data, $class, $format = null) {
+  public function denormalize($data, $class, $format = null, array $context = array()) {
     if (!isset($data['@type'])) {
       throw new UnexpectedValueException('JSON-LD @type parameter must be included.');
     }
diff --git a/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityReferenceNormalizer.php b/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityReferenceNormalizer.php
index 66767cf49733c7e48d198f1d9ba3abfce4aa6fa3..f57066dc6d4e2adef93357db1e3b25e6a5b7c800 100644
--- a/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityReferenceNormalizer.php
+++ b/core/modules/jsonld/lib/Drupal/jsonld/JsonldEntityReferenceNormalizer.php
@@ -30,7 +30,7 @@ class JsonldEntityReferenceNormalizer extends JsonldNormalizerBase implements De
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
    */
-  public function normalize($object, $format = NULL) {
+  public function normalize($object, $format = NULL, array $context = array()) {
     // @todo If an $options parameter is added to the serialize signature, as
     // requested in https://github.com/symfony/symfony/pull/4938, then instead
     // of creating the array of properties, we could simply call normalize and
@@ -45,7 +45,7 @@ public function normalize($object, $format = NULL) {
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::denormalize()
    */
-  public function denormalize($data, $class, $format = null) {
+  public function denormalize($data, $class, $format = null, array $context = array()) {
     // @todo Support denormalization for Entity Reference.
     return array();
   }
diff --git a/core/modules/jsonld/lib/Drupal/jsonld/JsonldFieldItemNormalizer.php b/core/modules/jsonld/lib/Drupal/jsonld/JsonldFieldItemNormalizer.php
index bf421a100559424b27c68c15cd32ba3bc3b7d17d..7e3d1241a5a04ed46d20776613ee13dc9e9f90c4 100644
--- a/core/modules/jsonld/lib/Drupal/jsonld/JsonldFieldItemNormalizer.php
+++ b/core/modules/jsonld/lib/Drupal/jsonld/JsonldFieldItemNormalizer.php
@@ -27,14 +27,14 @@ class JsonldFieldItemNormalizer extends JsonldNormalizerBase implements Denormal
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
    */
-  public function normalize($object, $format = NULL) {
+  public function normalize($object, $format = NULL, array $context = array()) {
     return $object->getPropertyValues();
   }
 
   /**
    * Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::denormalize()
    */
-  public function denormalize($data, $class, $format = null) {
+  public function denormalize($data, $class, $format = null, array $context = array()) {
     // For most fields, the field items array should simply be returned as is.
     return $data;
   }
diff --git a/core/modules/jsonld/lib/Drupal/jsonld/JsonldRdfSchemaNormalizer.php b/core/modules/jsonld/lib/Drupal/jsonld/JsonldRdfSchemaNormalizer.php
index 2834c6153bbf16cea51353132e7f5147db2a089e..9c63332e41772d3aa90751acd9b32c63064ef54e 100644
--- a/core/modules/jsonld/lib/Drupal/jsonld/JsonldRdfSchemaNormalizer.php
+++ b/core/modules/jsonld/lib/Drupal/jsonld/JsonldRdfSchemaNormalizer.php
@@ -25,7 +25,7 @@ class JsonldRdfSchemaNormalizer extends JsonldNormalizerBase {
   /**
     * Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
     */
-  public function normalize($data, $format = NULL) {
+  public function normalize($data, $format = NULL, array $context = array()) {
     $normalized = array();
     $graph = $data->getGraph();
 
diff --git a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php b/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
index bf1a755d13dd82d4c91fcec40da44206369f6081..edb3b5bda37add9db26cb27d055bb2953ace62b6 100644
--- a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
+++ b/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
@@ -29,7 +29,7 @@ class SerializationTestEncoder implements EncoderInterface {
    * @return string
    *   A string representation of $data in the requested format.
    */
-  public function encode($data, $format) {
+  public function encode($data, $format, array $context = array()) {
     // @see Drupal\serialization_test\SerializationTestNormalizer::normalize().
     return 'Normalized by ' . $data['normalized_by'] . ', Encoded by SerializationTestEncoder';
   }
diff --git a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php b/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
index 5519fe95e8770ba4820b5315fb85bdd9e8948648..81478c57924f666b235b9525a185cb42153b4067 100644
--- a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
+++ b/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
@@ -30,7 +30,7 @@ class SerializationTestNormalizer implements NormalizerInterface {
    *   An array containing a normalized representation of $object, appropriate
    *   for encoding to the requested format.
    */
-  public function normalize($object, $format = NULL) {
+  public function normalize($object, $format = NULL, array $context = array()) {
     $normalized = (array) $object;
     // Add identifying value that can be used to verify that the expected
     // normalizer was invoked.
diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php
index b7e57458296ad1d82ca6128cfa5b6e48b31af827..86501ae8d955824a6f554d01847c0bf12ae9f86c 100644
--- a/core/vendor/autoload.php
+++ b/core/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a::getLoader();
+return ComposerAutoloaderInit3c7622c3b1ba2ec69ca397628a542de0::getLoader();
diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php
index 5784e03ce5dd8caac39d75aa4fd305ade0c5df8d..d682386ca760929354315ff10548ea06b7c21075 100644
--- a/core/vendor/composer/autoload_real.php
+++ b/core/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php generated by Composer
 
-class ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a
+class ComposerAutoloaderInit3c7622c3b1ba2ec69ca397628a542de0
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ public static function getLoader()
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a', 'loadClassLoader'));
+        spl_autoload_register(array('ComposerAutoloaderInit3c7622c3b1ba2ec69ca397628a542de0', 'loadClassLoader'));
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit3c7622c3b1ba2ec69ca397628a542de0', 'loadClassLoader'));
 
         $vendorDir = dirname(__DIR__);
         $baseDir = dirname($vendorDir);
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index e8e495c9a968aa7fc86d13a37fd7059f5adc1052..07eea1c2b1590f98670d35e054001b7ca46beaf4 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -575,55 +575,6 @@
         "description": "Symfony Routing Component",
         "homepage": "http://symfony.com"
     },
-    {
-        "name": "symfony/serializer",
-        "version": "dev-master",
-        "version_normalized": "9999999-dev",
-        "target-dir": "Symfony/Component/Serializer",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony/Serializer",
-            "reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/symfony/Serializer/archive/ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0.zip",
-            "reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3"
-        },
-        "time": "2012-12-19 07:09:49",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.2-dev"
-            }
-        },
-        "installation-source": "source",
-        "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Serializer\\": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            }
-        ],
-        "description": "Symfony Serializer Component",
-        "homepage": "http://symfony.com"
-    },
     {
         "name": "symfony/yaml",
         "version": "dev-master",
@@ -980,5 +931,54 @@
             "database",
             "routing"
         ]
+    },
+    {
+        "name": "symfony/serializer",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "target-dir": "Symfony/Component/Serializer",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Serializer",
+            "reference": "45fe843e3144a594f93a6a372385c6534c7df31c"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://github.com/symfony/Serializer/archive/45fe843e3144a594f93a6a372385c6534c7df31c.zip",
+            "reference": "45fe843e3144a594f93a6a372385c6534c7df31c",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2013-01-19 07:50:02",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.2-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Serializer\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony Serializer Component",
+        "homepage": "http://symfony.com"
     }
 ]
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitattributes b/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitattributes
deleted file mode 100644
index 80481513cff2c5c6cde0c1bff5655bcde5f34976..0000000000000000000000000000000000000000
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-/Tests export-ignore
-phpunit.xml.dist export-ignore
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md b/core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md
index de46533563bcce416181d3d39e459e86294a1a47..6ccf5e5c4095fd0f6b041bd0091358f2d61f9226 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/CHANGELOG.md
@@ -1,6 +1,16 @@
 CHANGELOG
 =========
 
+2.2.0
+-----
+
+ * [BC BREAK] All Serializer, Normalizer and Encoder interfaces have been
+   modified to include an optional `$context` array parameter.
+ * The XML Root name can now be configured with the `xml_root_name`
+   parameter in the context option to the `XmlEncoder`.
+ * Options to `json_encode` and `json_decode` can be passed through
+   the context options of `JsonEncode` and `JsonDecode` encoder/decoders.
+
 2.1.0
 -----
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainDecoder.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainDecoder.php
index f555c6a8c98268bf51169a673b269512c2ac616e..6ece3b2205b9cae65df49dac4a94ea3938661174 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainDecoder.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainDecoder.php
@@ -34,9 +34,9 @@ public function __construct(array $decoders = array())
     /**
      * {@inheritdoc}
      */
-    final public function decode($data, $format)
+    final public function decode($data, $format, array $context = array())
     {
-        return $this->getDecoder($format)->decode($data, $format);
+        return $this->getDecoder($format)->decode($data, $format, $context);
     }
 
     /**
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainEncoder.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainEncoder.php
index ebb81efb9ff363ce2478caef1cd810a2e2923aba..bd10a2ad412a265a4b370f892927773ce6f6f4a4 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainEncoder.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/ChainEncoder.php
@@ -35,9 +35,9 @@ public function __construct(array $encoders = array())
     /**
      * {@inheritdoc}
      */
-    final public function encode($data, $format)
+    final public function encode($data, $format, array $context = array())
     {
-        return $this->getEncoder($format)->encode($data, $format);
+        return $this->getEncoder($format)->encode($data, $format, $context);
     }
 
     /**
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/DecoderInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/DecoderInterface.php
index e95271f740b01eef3d08a57e41877b0fbf9a5e9c..ffd221fe8d58b64f090c63969c4cb22ffcdee938 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/DecoderInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/DecoderInterface.php
@@ -23,10 +23,11 @@ interface DecoderInterface
      *
      * @param scalar $data   Data to decode
      * @param string $format Format name
+     * @param array  $context options that decoders have access to.
      *
      * @return mixed
      */
-    public function decode($data, $format);
+    public function decode($data, $format, array $context = array());
 
     /**
      * Checks whether the serializer can decode from given format
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/EncoderInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/EncoderInterface.php
index 4a68ad3fe9ea0510f44018fe0081e976f3007dda..2290db7f50d853610da5e908b5c446ebffe6dca9 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/EncoderInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/EncoderInterface.php
@@ -23,10 +23,11 @@ interface EncoderInterface
      *
      * @param mixed  $data   Data to encode
      * @param string $format Format name
+     * @param array  $context options that normalizers/encoders have access to.
      *
      * @return scalar
      */
-    public function encode($data, $format);
+    public function encode($data, $format, array $context = array());
 
     /**
      * Checks whether the serializer can encode to given format
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php
index 7ed8039eed878be04f7e04ecb907414b7a2225c6..e7cd9e073da5640559f6a9c11671e654dc058a70 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonDecode.php
@@ -21,6 +21,7 @@ class JsonDecode implements DecoderInterface
     private $associative;
     private $recursionDepth;
     private $lastError = JSON_ERROR_NONE;
+    protected $serializer;
 
     public function __construct($associative = false, $depth = 512)
     {
@@ -48,9 +49,20 @@ public function getLastError()
      *
      * @return mixed
      */
-    public function decode($data, $format)
+    public function decode($data, $format, array $context = array())
     {
-        $decodedData = json_decode($data, $this->associative, $this->recursionDepth);
+        $context = $this->resolveContext($context);
+
+        $associative    = $context['json_decode_associative'];
+        $recursionDepth = $context['json_decode_recursion_depth'];
+        $options        = $context['json_decode_options'];
+
+        if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
+            $decodedData = json_decode($data, $associative, $recursionDepth, $options);
+        } else {
+            $decodedData = json_decode($data, $associative, $recursionDepth);
+        }
+
         $this->lastError = json_last_error();
 
         return $decodedData;
@@ -63,4 +75,21 @@ public function supportsDecoding($format)
     {
         return JsonEncoder::FORMAT === $format;
     }
+
+    /**
+     * Merge the default options of the Json Decoder with the passed context.
+     *
+     * @param array $context
+     * @return array
+     */
+    private function resolveContext(array $context)
+    {
+        $defaultOptions = array(
+            'json_decode_associative' => $this->associative,
+            'json_decode_recursion_depth' => $this->recursionDepth,
+            'json_decode_options' => 0
+        );
+
+        return array_merge($defaultOptions, $context);
+    }
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php
index 280b8a9733386b336c32230e1129d6407cc7d227..4e0de3ed75890ce4e89b178f46321a79c3ef35fb 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncode.php
@@ -41,14 +41,13 @@ public function getLastError()
     /**
      * Encodes PHP data to a JSON string
      *
-     * @param mixed  $data
-     * @param string $format
-     *
-     * @return string
+     * {@inheritdoc}
      */
-    public function encode($data, $format)
+    public function encode($data, $format, array $context = array())
     {
-        $encodedJson = json_encode($data, $this->options);
+        $context = $this->resolveContext($context);
+
+        $encodedJson = json_encode($data, $context['json_encode_options']);
         $this->lastError = json_last_error();
 
         return $encodedJson;
@@ -61,4 +60,15 @@ public function supportsEncoding($format)
     {
         return JsonEncoder::FORMAT === $format;
     }
+
+    /**
+     * Merge default json encode options with context.
+     *
+     * @param array $context
+     * @return array
+     */
+    private function resolveContext(array $context = array())
+    {
+        return array_merge(array('json_encode_options' => $this->options), $context);
+    }
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php
index 73918b70516a7d342a429d31596a6c96adcc1f0a..02b179bc91a66a904dbc18a372e42505a883fcbf 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/JsonEncoder.php
@@ -59,17 +59,17 @@ public function getLastDecodingError()
     /**
      * {@inheritdoc}
      */
-    public function encode($data, $format)
+    public function encode($data, $format, array $context = array())
     {
-        return $this->encodingImpl->encode($data, self::FORMAT);
+        return $this->encodingImpl->encode($data, self::FORMAT, $context);
     }
 
     /**
      * {@inheritdoc}
      */
-    public function decode($data, $format)
+    public function decode($data, $format, array $context = array())
     {
-        return $this->decodingImpl->decode($data, self::FORMAT);
+        return $this->decodingImpl->decode($data, self::FORMAT, $context);
     }
 
     /**
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php
index 11de50af08aa0ad9022d5e2c81899290deef9246..909b3cefe7b4b8615733b164e638a885113a1f5a 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Encoder/XmlEncoder.php
@@ -26,24 +26,36 @@ class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, Dec
     private $format;
     private $rootNodeName = 'response';
 
+    /**
+     * Construct new XmlEncoder and allow to change the root node element name.
+     *
+     * @param string $rootNodeName
+     */
+    public function __construct($rootNodeName = 'response')
+    {
+        $this->rootNodeName = $rootNodeName;
+    }
+
     /**
      * {@inheritdoc}
      */
-    public function encode($data, $format)
+    public function encode($data, $format, array $context = array())
     {
         if ($data instanceof \DOMDocument) {
             return $data->saveXML();
         }
 
+        $xmlRootNodeName = $this->resolveXmlRootName($context);
+
         $this->dom = new \DOMDocument();
         $this->format = $format;
 
         if (null !== $data && !is_scalar($data)) {
-            $root = $this->dom->createElement($this->rootNodeName);
+            $root = $this->dom->createElement($xmlRootNodeName);
             $this->dom->appendChild($root);
-            $this->buildXml($root, $data);
+            $this->buildXml($root, $data, $xmlRootNodeName);
         } else {
-            $this->appendNode($this->dom, $data, $this->rootNodeName);
+            $this->appendNode($this->dom, $data, $xmlRootNodeName);
         }
 
         return $this->dom->saveXML();
@@ -52,7 +64,7 @@ public function encode($data, $format)
     /**
      * {@inheritdoc}
      */
-    public function decode($data, $format)
+    public function decode($data, $format, array $context = array())
     {
         $internalErrors = libxml_use_internal_errors(true);
         $disableEntities = libxml_disable_entity_loader(true);
@@ -269,12 +281,13 @@ private function parseXml($node)
      *
      * @param DOMNode      $parentNode
      * @param array|object $data       data
+     * @param string       $xmlRootNodeName
      *
      * @return Boolean
      *
      * @throws UnexpectedValueException
      */
-    private function buildXml($parentNode, $data)
+    private function buildXml($parentNode, $data, $xmlRootNodeName)
     {
         $append = true;
 
@@ -310,21 +323,24 @@ private function buildXml($parentNode, $data)
 
             return $append;
         }
+
         if (is_object($data)) {
             $data = $this->serializer->normalize($data, $this->format);
             if (null !== $data && !is_scalar($data)) {
-                return $this->buildXml($parentNode, $data);
+                return $this->buildXml($parentNode, $data, $xmlRootNodeName);
             }
+
             // top level data object was normalized into a scalar
             if (!$parentNode->parentNode->parentNode) {
                 $root = $parentNode->parentNode;
                 $root->removeChild($parentNode);
 
-                return $this->appendNode($root, $data, $this->rootNodeName);
+                return $this->appendNode($root, $data, $xmlRootNodeName);
             }
 
             return $this->appendNode($parentNode, $data, 'data');
         }
+
         throw new UnexpectedValueException('An unexpected value could not be serialized: '.var_export($data, true));
     }
 
@@ -376,7 +392,7 @@ private function needsCdataWrapping($val)
     private function selectNodeType($node, $val)
     {
         if (is_array($val)) {
-            return $this->buildXml($node, $val);
+            return $this->buildXml($node, $val, null);
         } elseif ($val instanceof \SimpleXMLElement) {
             $child = $this->dom->importNode(dom_import_simplexml($val), true);
             $node->appendChild($child);
@@ -399,4 +415,15 @@ private function selectNodeType($node, $val)
 
         return true;
     }
+
+    /**
+     * Get real XML root node name, taking serializer options into account.
+     */
+    private function resolveXmlRootName(array $context = array())
+    {
+        return isset($context['xml_root_node_name'])
+            ? $context['xml_root_node_name']
+            : $this->rootNodeName;
+    }
+
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/LICENSE b/core/vendor/symfony/serializer/Symfony/Component/Serializer/LICENSE
index cdffe7aebc04acd5c2b9c3042a0923d8e8f31998..88a57f8d8da49126c6f7d225d567ad216ace4d83 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/LICENSE
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2012 Fabien Potencier
+Copyright (c) 2004-2013 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php
index 4510fa0b8006d655de4aa9e699411bcfb5d39f84..0ebe00fda54f54452e9c2486e24ee05c553b8386 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/CustomNormalizer.php
@@ -19,18 +19,18 @@ class CustomNormalizer extends SerializerAwareNormalizer implements NormalizerIn
     /**
      * {@inheritdoc}
      */
-    public function normalize($object, $format = null)
+    public function normalize($object, $format = null, array $context = array())
     {
-        return $object->normalize($this->serializer, $format);
+        return $object->normalize($this->serializer, $format, $context);
     }
 
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null)
+    public function denormalize($data, $class, $format = null, array $context = array())
     {
         $object = new $class;
-        $object->denormalize($this->serializer, $data, $format);
+        $object->denormalize($this->serializer, $data, $format, $context);
 
         return $object;
     }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php
index 3f3bf883238dd09002f387acb0fabdf900325a30..5a1b4c196b59418e709fa20c9020e51456d4f2a3 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php
@@ -32,6 +32,7 @@ interface DenormalizableInterface
      * @param array|scalar $data   The data from which to re-create the object.
      * @param string|null  $format The format is optionally given to be able to denormalize differently
      *   based on different input formats.
+     * @param array        $context options for denormalizing
      */
-    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null);
+    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = array());
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizerInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizerInterface.php
index 384f9febb66832e73eceefc2100ce7651ba405ee..1a5ff93f751de757b1052f39728cfc47103ddb11 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizerInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/DenormalizerInterface.php
@@ -24,10 +24,11 @@ interface DenormalizerInterface
      * @param mixed  $data   data to restore
      * @param string $class  the expected class to instantiate
      * @param string $format format the given data was extracted from
+     * @param array  $context options available to the denormalizer
      *
      * @return object
      */
-    public function denormalize($data, $class, $format = null);
+    public function denormalize($data, $class, $format = null, array $context = array());
 
     /**
      * Checks whether the given class is supported for denormalization by this normalizer
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
index 2c5f1b3e874dfe890ee3c09f3a094cea5805a45c..63e7a1dea91eff470a9c3a172d012aaa8c9eb242 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
@@ -69,7 +69,7 @@ public function setIgnoredAttributes(array $ignoredAttributes)
     /**
      * {@inheritdoc}
      */
-    public function normalize($object, $format = null)
+    public function normalize($object, $format = null, array $context = array())
     {
         $reflectionObject = new \ReflectionObject($object);
         $reflectionMethods = $reflectionObject->getMethods(\ReflectionMethod::IS_PUBLIC);
@@ -101,7 +101,7 @@ public function normalize($object, $format = null)
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null)
+    public function denormalize($data, $class, $format = null, array $context = array())
     {
         $reflectionClass = new \ReflectionClass($class);
         $constructor = $reflectionClass->getConstructor();
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizableInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizableInterface.php
index fb77a836d8d908482262e4b3d866b602ee216953..07c3a4a8dd8e81011ed325124b54dc6df47bff0e 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizableInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizableInterface.php
@@ -31,8 +31,9 @@ interface NormalizableInterface
      *   can use it to normalize objects contained within this object.
      * @param string|null $format The format is optionally given to be able to normalize differently
      *   based on different output formats.
+     * @param array $context Options for normalizing this object
      *
      * @return array|scalar
      */
-    public function normalize(NormalizerInterface $normalizer, $format = null);
+    public function normalize(NormalizerInterface $normalizer, $format = null, array $context = array());
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php
index f0915db2b45300efa14d19e3387e6f7fa11c3cbc..744307a2ba37d4ebf11d01966031f1c56c628118 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php
@@ -23,10 +23,11 @@ interface NormalizerInterface
      *
      * @param object $object object to normalize
      * @param string $format format the normalization result will be encoded as
+     * @param array $context Context options for the normalizer
      *
      * @return array|scalar
      */
-    public function normalize($object, $format = null);
+    public function normalize($object, $format = null, array $context = array());
 
     /**
      * Checks whether the given class is supported for normalization by this normalizer
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php
index cad6963b164f36063ea6cfd2c79dffa22343a5d5..ab6fd58b5fde6714383e165aec721bc530ac1d31 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Serializer.php
@@ -39,8 +39,8 @@ class Serializer implements SerializerInterface, NormalizerInterface, Denormaliz
 {
     protected $encoder;
     protected $decoder;
-    protected $normalizers = array();
-    protected $normalizerCache = array();
+    protected $normalizers       = array();
+    protected $normalizerCache   = array();
     protected $denormalizerCache = array();
 
     public function __construct(array $normalizers = array(), array $encoders = array())
@@ -72,58 +72,58 @@ public function __construct(array $normalizers = array(), array $encoders = arra
     /**
      * {@inheritdoc}
      */
-    final public function serialize($data, $format)
+    final public function serialize($data, $format, array $context = array())
     {
         if (!$this->supportsEncoding($format)) {
             throw new UnexpectedValueException('Serialization for the format '.$format.' is not supported');
         }
 
         if ($this->encoder->needsNormalization($format)) {
-            $data = $this->normalize($data, $format);
+            $data = $this->normalize($data, $format, $context);
         }
 
-        return $this->encode($data, $format);
+        return $this->encode($data, $format, $context);
     }
 
     /**
      * {@inheritdoc}
      */
-    final public function deserialize($data, $type, $format)
+    final public function deserialize($data, $type, $format, array $context = array())
     {
         if (!$this->supportsDecoding($format)) {
             throw new UnexpectedValueException('Deserialization for the format '.$format.' is not supported');
         }
 
-        $data = $this->decode($data, $format);
+        $data = $this->decode($data, $format, $context);
 
-        return $this->denormalize($data, $type, $format);
+        return $this->denormalize($data, $type, $format, $context);
     }
 
     /**
      * {@inheritdoc}
      */
-    public function normalize($data, $format = null)
+    public function normalize($data, $format = null, array $context = array())
     {
         if (null === $data || is_scalar($data)) {
             return $data;
         }
         if (is_object($data) && $this->supportsNormalization($data, $format)) {
-            return $this->normalizeObject($data, $format);
+            return $this->normalizeObject($data, $format, $context);
         }
         if ($data instanceof \Traversable) {
             $normalized = array();
             foreach ($data as $key => $val) {
-                $normalized[$key] = $this->normalize($val, $format);
+                $normalized[$key] = $this->normalize($val, $format, $context);
             }
 
             return $normalized;
         }
         if (is_object($data)) {
-            return $this->normalizeObject($data, $format);
+            return $this->normalizeObject($data, $format, $context);
         }
         if (is_array($data)) {
             foreach ($data as $key => $val) {
-                $data[$key] = $this->normalize($val, $format);
+                $data[$key] = $this->normalize($val, $format, $context);
             }
 
             return $data;
@@ -134,9 +134,9 @@ public function normalize($data, $format = null)
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $type, $format = null)
+    public function denormalize($data, $type, $format = null, array $context = array())
     {
-        return $this->denormalizeObject($data, $type, $format);
+        return $this->denormalizeObject($data, $type, $format, $context);
     }
 
     /**
@@ -202,17 +202,17 @@ private function getDenormalizer($data, $type, $format = null)
     /**
      * {@inheritdoc}
      */
-    final public function encode($data, $format)
+    final public function encode($data, $format, array $context = array())
     {
-        return $this->encoder->encode($data, $format);
+        return $this->encoder->encode($data, $format, $context);
     }
 
     /**
      * {@inheritdoc}
      */
-    final public function decode($data, $format)
+    final public function decode($data, $format, array $context = array())
     {
-        return $this->decoder->decode($data, $format);
+        return $this->decoder->decode($data, $format, $context);
     }
 
     /**
@@ -220,13 +220,14 @@ final public function decode($data, $format)
      *
      * @param object $object object to normalize
      * @param string $format format name, present to give the option to normalizers to act differently based on formats
+     * @param array $context The context data for this particular normalization
      *
      * @return array|scalar
      *
      * @throws LogicException
      * @throws UnexpectedValueException
      */
-    private function normalizeObject($object, $format = null)
+    private function normalizeObject($object, $format = null, array $context = array())
     {
         if (!$this->normalizers) {
             throw new LogicException('You must register at least one normalizer to be able to normalize objects.');
@@ -234,14 +235,14 @@ private function normalizeObject($object, $format = null)
 
         $class = get_class($object);
         if (isset($this->normalizerCache[$class][$format])) {
-            return $this->normalizerCache[$class][$format]->normalize($object, $format);
+            return $this->normalizerCache[$class][$format]->normalize($object, $format, $context);
         }
 
         foreach ($this->normalizers as $normalizer) {
             if ($normalizer->supportsNormalization($object, $format)) {
                 $this->normalizerCache[$class][$format] = $normalizer;
 
-                return $normalizer->normalize($object, $format);
+                return $normalizer->normalize($object, $format, $context);
             }
         }
 
@@ -254,27 +255,28 @@ private function normalizeObject($object, $format = null)
      * @param mixed  $data   data to restore
      * @param string $class  the expected class to instantiate
      * @param string $format format name, present to give the option to normalizers to act differently based on formats
+     * @param array $context The context data for this particular denormalization
      *
      * @return object
      *
      * @throws LogicException
      * @throws UnexpectedValueException
      */
-    private function denormalizeObject($data, $class, $format = null)
+    private function denormalizeObject($data, $class, $format = null, array $context = array())
     {
         if (!$this->normalizers) {
             throw new LogicException('You must register at least one normalizer to be able to denormalize objects.');
         }
 
         if (isset($this->denormalizerCache[$class][$format])) {
-            return $this->denormalizerCache[$class][$format]->denormalize($data, $class, $format);
+            return $this->denormalizerCache[$class][$format]->denormalize($data, $class, $format, $context);
         }
 
         foreach ($this->normalizers as $normalizer) {
             if ($normalizer->supportsDenormalization($data, $class, $format)) {
                 $this->denormalizerCache[$class][$format] = $normalizer;
 
-                return $normalizer->denormalize($data, $class, $format);
+                return $normalizer->denormalize($data, $class, $format, $context);
             }
         }
 
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerInterface.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerInterface.php
index 143179fe7a313481342bb0b54fec3ce34def77be..d196d780a95be8ef55789cadeec0820523ea15bd 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerInterface.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/SerializerInterface.php
@@ -21,12 +21,13 @@ interface SerializerInterface
     /**
      * Serializes data in the appropriate format
      *
-     * @param mixed  $data   any data
-     * @param string $format format name
+     * @param mixed  $data    any data
+     * @param string $format  format name
+     * @param array  $context options normalizers/encoders have access to
      *
      * @return string
      */
-    public function serialize($data, $format);
+    public function serialize($data, $format, array $context = array());
 
     /**
      * Deserializes data into the given type.
@@ -34,8 +35,9 @@ public function serialize($data, $format);
      * @param mixed  $data
      * @param string $type
      * @param string $format
+     * @param array  $context
      *
      * @return object
      */
-    public function deserialize($data, $type, $format);
+    public function deserialize($data, $type, $format, array $context = array());
 }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c2f60728d96de424f190138cf32f398de8e830ca
--- /dev/null
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/JsonEncoderTest.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Encoder;
+
+use Symfony\Component\Serializer\Encoder\JsonEncoder;
+use Symfony\Component\Serializer\Serializer;
+use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
+
+class JsonEncoderTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        $this->encoder = new JsonEncoder;
+        $this->serializer = new Serializer(array(new CustomNormalizer()), array('json' => new JsonEncoder()));
+    }
+
+    public function testEncodeScalar()
+    {
+        $obj = new \stdClass;
+        $obj->foo = "foo";
+
+        $expected = '{"foo":"foo"}';
+
+        $this->assertEquals($expected, $this->encoder->encode($obj, 'json'));
+    }
+
+    public function testComplexObject()
+    {
+        $obj = $this->getObject();
+
+        $expected = $this->getJsonSource();
+
+        $this->assertEquals($expected, $this->encoder->encode($obj, 'json'));
+    }
+
+    public function testOptions()
+    {
+        $context = array('json_encode_options' => JSON_NUMERIC_CHECK);
+
+        $arr = array();
+        $arr['foo'] = "3";
+
+        $expected = '{"foo":3}';
+
+        $this->assertEquals($expected, $this->serializer->serialize($arr, 'json', $context));
+
+        $arr = array();
+        $arr['foo'] = "3";
+
+        $expected = '{"foo":"3"}';
+
+        $this->assertEquals($expected, $this->serializer->serialize($arr, 'json'), 'Context should not be persistent');
+    }
+
+
+    protected function getJsonSource()
+    {
+        return '{"foo":"foo","bar":["a","b"],"baz":{"key":"val","key2":"val","A B":"bar","item":[{"title":"title1"},{"title":"title2"}],"Barry":{"FooBar":{"Baz":"Ed","@id":1}}},"qux":"1"}';
+    }
+
+    protected function getObject()
+    {
+        $obj = new \stdClass;
+        $obj->foo = 'foo';
+        $obj->bar = array('a', 'b');
+        $obj->baz = array('key' => 'val', 'key2' => 'val', 'A B' => 'bar', 'item' => array(array('title' => 'title1'), array('title' => 'title2')), 'Barry' => array('FooBar' => array('Baz' => 'Ed', '@id' => 1)));
+        $obj->qux = "1";
+
+        return $obj;
+    }
+}
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php
index 23cb0217a6be25a238bfb378c603f359c5531cd7..b23d4c79390977d29ece3017299e02f9369a8644 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php
@@ -184,6 +184,23 @@ public function testEncode()
         $this->assertEquals($source, $this->encoder->encode($obj, 'xml'));
     }
 
+    public function testEncodeSerializerXmlRootNodeNameOption()
+    {
+        $options = array('xml_root_node_name' => 'test');
+        $this->encoder = new XmlEncoder;
+        $serializer = new Serializer(array(), array('xml' => new XmlEncoder()));
+        $this->encoder->setSerializer($serializer);
+
+        $array = array(
+            'person' => array('@gender' => 'M', '#' => 'Peter'),
+        );
+
+        $expected = '<?xml version="1.0"?>'."\n".
+            '<test><person gender="M">Peter</person></test>'."\n";
+
+        $this->assertEquals($expected, $serializer->serialize($array, 'xml', $options));
+    }
+
     public function testDecode()
     {
         $source = $this->getXmlSource();
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/DenormalizableDummy.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/DenormalizableDummy.php
index 468d44487645ecd3531c0f4e80f8f208ee277a7e..09b8a5281216d7d7798cf3e8ba8c4dfb899ada9d 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/DenormalizableDummy.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/DenormalizableDummy.php
@@ -17,7 +17,7 @@
 class DenormalizableDummy implements DenormalizableInterface
 {
 
-    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null)
+    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = array())
     {
 
     }
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/Dummy.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/Dummy.php
index cdcf510df0a2549d2022f8bfd743fd9930640e3b..6b33e84374405bf2337b377abce7a38ba37af88e 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/Dummy.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/Dummy.php
@@ -23,7 +23,7 @@ class Dummy implements NormalizableInterface, DenormalizableInterface
     public $baz;
     public $qux;
 
-    public function normalize(NormalizerInterface $normalizer, $format = null)
+    public function normalize(NormalizerInterface $normalizer, $format = null, array $context = array())
     {
         return array(
             'foo' => $this->foo,
@@ -33,7 +33,7 @@ public function normalize(NormalizerInterface $normalizer, $format = null)
         );
     }
 
-    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null)
+    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = array())
     {
         $this->foo = $data['foo'];
         $this->bar = $data['bar'];
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/NormalizableTraversableDummy.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/NormalizableTraversableDummy.php
index ba1f924e015fac0931ba39ba49ba3c1e2bc41b63..3ac2fe364f9a636c52020cf47137325b3aaa3944 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/NormalizableTraversableDummy.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/NormalizableTraversableDummy.php
@@ -18,7 +18,7 @@
 
 class NormalizableTraversableDummy extends TraversableDummy implements NormalizableInterface, DenormalizableInterface
 {
-    public function normalize(NormalizerInterface $normalizer, $format = null)
+    public function normalize(NormalizerInterface $normalizer, $format = null, array $context = array())
     {
         return array(
             'foo' => 'normalizedFoo',
@@ -26,7 +26,7 @@ public function normalize(NormalizerInterface $normalizer, $format = null)
         );
     }
 
-    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null)
+    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = array())
     {
         return array(
             'foo' => 'denormalizedFoo',
diff --git a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/ScalarDummy.php b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/ScalarDummy.php
index 1b0516a4174eb5f2945ebc6493436bbf7fc13a3c..e9db23882b58f5975a6447dc25fa93e9017aeb6b 100644
--- a/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/ScalarDummy.php
+++ b/core/vendor/symfony/serializer/Symfony/Component/Serializer/Tests/Fixtures/ScalarDummy.php
@@ -21,12 +21,12 @@ class ScalarDummy implements NormalizableInterface, DenormalizableInterface
     public $foo;
     public $xmlFoo;
 
-    public function normalize(NormalizerInterface $normalizer, $format = null)
+    public function normalize(NormalizerInterface $normalizer, $format = null, array $context = array())
     {
         return $format === 'xml' ? $this->xmlFoo : $this->foo;
     }
 
-    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null)
+    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = array())
     {
         if ($format === 'xml') {
             $this->xmlFoo = $data;