使用JMS序列化器进行XML反序列化

真实阴影

我试图反序列化这个非常简单的XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <namespace>foo</namespace>
    <resource>bar</resource>
    <description>baz</description>
    <arguments>
        <argument>
            <name>foo</name>
            <type>string</type>
            <description>foo</description>
        </argument>
        <argument>
            <name>bar</name>
            <type>string</type>
            <description>bar</description>
        </argument>
    </arguments>
</root>

无论我尝试什么,我都不能将参数元素反序列化为arrayArrayCollection或任何种类的集合,因为该数组总是以空结尾。

/**
 * @Type("array<Model\Argument>")
 */
private $arguments;

/**
 * @Type("ArrayCollection<Model\Argument>")
 */
private $arguments;

两者最终都为空数组。所以我尝试为参数创建一个单独的对象

因此,原始属性最终变为

/**
 * @Type("Model\Arguments")
 */
private $arguments;

和班级

class Arguments {
    /**
     * @Type("array<App\Blueprint\Model\Argument>")
     */
    private $arguments;

    /**
     * @return mixed
     */
    public function getArguments() {
        return $this->arguments;
    }

    /**
     * @param mixed $arguments
     */
    public function setArguments($arguments) {
        $this->arguments = $arguments;
    }
}

数组仍然为空。但是,当我将类型更改@Type("App\Blueprint\Model\Argument")为时,尽管只有第一个对象,但我将获得正确的对象。

当我尝试注册反序列化处理程序时,我无法对其进行修改,因为它来了SimpleXmlElement,然后我会收到It is not yet possible to assign complex types to properties警告...

编辑

现在,我设法以一种愚蠢的方式解决了这个问题:

$registry->registerHandler(
    'deserialization',
    'Model\Arguments',
    'xml',
    function(XmlDeserializationVisitor $visitor, $data, array $type, DeserializationContext $context) {
        $arguments = [];
        foreach($data->children() as $child) {
            $arguments[] = SerializerBuilder::create()
                ->build()
                ->deserialize($child->asXML(), 'Model\Argument', 'xml');
        }

        return $arguments;
    }
);

如果有人有更好的解决方案,就把它留在这里

戴维·斯皮斯(David Spiess)

你离我很近。您必须定义两个单独的类。

/**
 * @Type("Model\Arguments")
 */
public $arguments;
/**
 * @Type("array<Model\Argument>")
 * @XmlList(inline = true, entry = "argument")
 */
public $argument;

请注意该类中@XmlList属性Argument您也可以删除getter和setter!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JMS序列化器进行XML反序列化

来自分类Dev

使用Java和简单XML序列化器/反序列化器反序列化XML文件

来自分类Dev

使用Java和简单XML序列化器/反序列化器反序列化XML文件

来自分类Dev

使用JsonTypeInfo进行序列化/反序列化

来自分类Dev

使用JsonTypeInfo进行序列化/反序列化

来自分类Dev

使用JsonTypeInfo进行序列化/反序列化

来自分类Dev

使用JMS序列化器反序列化时,Gedmo Timestampable始终会更新参考

来自分类Dev

JSON使用.NET DataContractJsonSerializer序列化器与字典进行序列化/反序列化

来自分类Dev

具有XML反序列化功能的JMS序列化程序列表多态

来自分类Dev

使用列表反序列化xml

来自分类Dev

JMS序列化器-反序列化XML中的非周期性节点结构

来自分类Dev

C# XML 反序列化器不反序列化日期

来自分类Dev

序列化/反序列化从Treenode派生的XML

来自分类Dev

自定义反序列化,然后使用Jackson进行反序列化

来自分类Dev

您如何使用newtonsoft JSON反序列化器反序列化Geopoint?

来自分类Dev

使用JSON.Net反序列化器反序列化动态JSON

来自分类Dev

使用plpgsql序列化/反序列化

来自分类Dev

如何使用C#对XML文件中的数据进行序列化和反序列化?

来自分类Dev

spring-data-rest和控制器,使用相同的objectMaper进行序列化/反序列化

来自分类Dev

想要反序列化XML以特定方式进行对象

来自分类Dev

Jackson:使用其他属性名称进行序列化/反序列化

来自分类Dev

使用RAILS用特殊字符进行JSON序列化和反序列化

来自分类Dev

使用json.net对对象属性进行条件序列化/反序列化

来自分类Dev

使用Json.NET对混合类型的数组进行序列化/反序列化

来自分类Dev

使用Upickle对密封特性进行序列化/反序列化

来自分类Dev

使用Firestore DB进行Flutter数据序列化和反序列化

来自分类Dev

使用Jackson JSON是否可以进行非对称序列化和反序列化?

来自分类Dev

使用Jersey和Jackson进行Map的序列化和反序列化

来自分类Dev

使用原型对象进行序列化/反序列化

Related 相关文章

  1. 1

    使用JMS序列化器进行XML反序列化

  2. 2

    使用Java和简单XML序列化器/反序列化器反序列化XML文件

  3. 3

    使用Java和简单XML序列化器/反序列化器反序列化XML文件

  4. 4

    使用JsonTypeInfo进行序列化/反序列化

  5. 5

    使用JsonTypeInfo进行序列化/反序列化

  6. 6

    使用JsonTypeInfo进行序列化/反序列化

  7. 7

    使用JMS序列化器反序列化时,Gedmo Timestampable始终会更新参考

  8. 8

    JSON使用.NET DataContractJsonSerializer序列化器与字典进行序列化/反序列化

  9. 9

    具有XML反序列化功能的JMS序列化程序列表多态

  10. 10

    使用列表反序列化xml

  11. 11

    JMS序列化器-反序列化XML中的非周期性节点结构

  12. 12

    C# XML 反序列化器不反序列化日期

  13. 13

    序列化/反序列化从Treenode派生的XML

  14. 14

    自定义反序列化,然后使用Jackson进行反序列化

  15. 15

    您如何使用newtonsoft JSON反序列化器反序列化Geopoint?

  16. 16

    使用JSON.Net反序列化器反序列化动态JSON

  17. 17

    使用plpgsql序列化/反序列化

  18. 18

    如何使用C#对XML文件中的数据进行序列化和反序列化?

  19. 19

    spring-data-rest和控制器,使用相同的objectMaper进行序列化/反序列化

  20. 20

    想要反序列化XML以特定方式进行对象

  21. 21

    Jackson:使用其他属性名称进行序列化/反序列化

  22. 22

    使用RAILS用特殊字符进行JSON序列化和反序列化

  23. 23

    使用json.net对对象属性进行条件序列化/反序列化

  24. 24

    使用Json.NET对混合类型的数组进行序列化/反序列化

  25. 25

    使用Upickle对密封特性进行序列化/反序列化

  26. 26

    使用Firestore DB进行Flutter数据序列化和反序列化

  27. 27

    使用Jackson JSON是否可以进行非对称序列化和反序列化?

  28. 28

    使用Jersey和Jackson进行Map的序列化和反序列化

  29. 29

    使用原型对象进行序列化/反序列化

热门标签

归档