【问题标题】:Symfony Serializer XML AttributeSymfony 序列化器 XML 属性
【发布时间】:2019-04-18 15:28:35
【问题描述】:

我想使用 Symfony XML Serializer 来转换类实例(不是数组)。因此,例如,我想使用属性 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 Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
use Doctrine\Common\Annotations\AnnotationReader;



$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>

【问题讨论】:

  • 如果可以的话,继续使用 JMSSerializer Bundle。一个带有属性的例子是here

标签: xml symfony serialization


【解决方案1】:

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

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

编码如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多