如何在Symfony 4的JMS序列化程序2和序列化程序包3中使用具有相同名称的属性和元素

时间:2019-01-17 09:36:09

标签: annotations jms symfony4 serializer

我需要一点帮助。我们有合作伙伴提供的XSD, 我们必须构建一个XML,其中元素对实际的键/值对和节点属性使用相同的名称。

<xs:element name="Translation">
      <xs:complexType>
          <xs:sequence>
              <xs:element ref="Name" minOccurs="0"/>
              <xs:choice minOccurs="0">
                  <xs:element ref="Value"/>
                  <xs:element ref="Unit"/>
                  <xs:sequence>
                      <xs:element ref="OptionName"/>
                      <xs:element ref="OptionValue" minOccurs="0"/>
                  </xs:sequence>
              </xs:choice>
          </xs:sequence>
          <xs:attribute name="lang" use="required" type="xs:string"/>
          <xs:attribute name="name"/>
          <xs:attribute name="value"/>
          <xs:attribute name="code" type="xs:string"/>
      </xs:complexType>
</xs:element>

如您所见,有“名称”和“值”用作元素和属性。

是否可以告诉JMS序列化器使用另一个函数来获取那些变量?

该类如下:

use App\DataTransfer\AbstractDto;
use JMS\Serializer\Annotation as JMS;

class Translation extends AbstractDto
{

    /**
     * @var string
     * @JMS\XmlELement(cdata=false)
     */
    private $Name;

    /**
     * @var string
     * @JMS\XmlElement(cdata=false)
     */
    private $Value;

    /**
     * @var string
     * @JMS\XmlElement(cdata=false)
     */
    private $Unit;

    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $lang;
    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $name;
    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $code;
    /**
     * @var string
     * @JMS\XmlAttribute
     */
    private $value;
    [...]

现在生成的getter和setter不能使用序列化程序两次所需的set / getName和set / getValue ...

旁人有个主意吗?

非常感谢提前

exa.byte

0 个答案:

没有答案