Symfony Serializer XML Attribute



我想使用Symfony XML序列化程序来转换类实例(而不是数组(。因此,例如,我想创建一个属性为myAtt="foo"的XML,

<?xml version="1.0"?>
<REQ>
    <TravelAgencySender myAtt="foo">
        <CityName>town</CityName>
        <AgencyID>agency</AgencyID>
    </TravelAgencySender>   
</REQ>

所以我创建了一个这样的类

class TravelAgencySender 
{
    /**
     * @var string
     */
    private  $CityName;
    /**
     * @var string
     */
    public  $AgencyID;
.....
}

和以下初始化

use SymfonyComponentSerializerEncoderJsonEncoder;
use SymfonyComponentSerializerNameConverterMetadataAwareNameConverter;
use SymfonyComponentSerializerNormalizerObjectNormalizer;
use SymfonyComponentSerializerSerializer;
use SymfonyComponentSerializerEncoderXmlEncoder;
use SymfonyComponentSerializerMappingFactoryClassMetadataFactory;
use SymfonyComponentSerializerMappingLoaderAnnotationLoader;
use DoctrineCommonAnnotationsAnnotationReader;

$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$metadataAwareNameConverter = new MetadataAwareNameConverter($classMetadataFactory);
$serializer = new Serializer(
    [new ObjectNormalizer($classMetadataFactory, $metadataAwareNameConverter)],
    ['json' => new JsonEncoder(), 'xml' => new XmlEncoder()]
);

有谁知道如何添加 myAtt 属性?

谢谢

这将产生以下 XML

<?xml version="1.0"?>
<REQ>
    <TravelAgencySender>
        <CityName>town</CityName>
        <AgencyID>agency</AgencyID>
    </TravelAgencySender>   
</REQ>

以 @ 开头的数组键被视为 XML 属性:

['foo' => ['@bar' => 'value']];

编码如下:

<?xml version="1.0"?>
<response>
     <foo bar="value"/>
</response>

最新更新