我正在使用返回 XML 的 API。我可以使用 API 检索一个或多个帐户。我正在使用Jms 序列化器将这些数据反序列化为简单的模型类来保存数据。
一个帐户看起来像
<account href="https://your-subdomain.recurly.com/v2/accounts/1">
...
<account_code>1</account_code>
<state>active</state>
<username nil="nil"></username>
<email>verena@example.com</email>
<first_name>Verena</first_name>
<last_name>Example</last_name>
...
<address>...</address>
</account>
我设法Account
按如下方式配置我的对象,在反序列化时效果很好:
<?php
namespace Recurly\Model;
use JMS\Serializer\Annotation as JMS;
/**
* @JMS\XmlRoot("account")
*/
class Account
{
/** @JMS\Type("string") */
protected $account_code;
/** @JMS\Type("string") */
protected $state;
/** @JMS\Type("string") */
protected $username;
/** @JMS\Type("string") */
protected $email;
/** @JMS\Type("string") */
protected $first_name;
/** @JMS\Type("string") */
protected $last_name;
/** @JMS\Type("string") */
protected $company_name;
/** @JMS\Type("string") */
protected $vat_number;
/** @JMS\Type("Model\Address") */
protected $address;
/** @JMS\Type("string") */
protected $accept_language;
/** @JMS\Type("string") */
protected $hosted_login_token;
/** @JMS\Type("DateTime") */
protected $created_at;
// getters and setters here
}
现在,当我获得多个帐户时,它看起来像这样:
<accounts type="array">
<account href="https://your-subdomain.recurly.com/v2/accounts/1">...</account>
<account href="https://your-subdomain.recurly.com/v2/accounts/2">...</account>
<account href="https://your-subdomain.recurly.com/v2/accounts/3">...</account>
</accounts>
我想将其反序列化为一组帐户。然而,目前,我发现唯一能做到这一点的方法是创建第二个名为的模型Accounts
,如下所示:
<?php
namespace Recurly\Model;
use JMS\Serializer\Annotation as JMS;
class Accounts
{
/**
* @var Account[]
*
* @JMS\Type("array<Recurly\Model\Account>")
* @JMS\XmlList(entry="account")
*/
protected $accounts;
// getters and setters here
}
反序列化时,我必须传递正确的上下文:
$serializer->deserialize($rawXml, 'Recurly\Model\Account', 'xml'); // or Recurly\Model\Accounts if I get multiple.
我在某个地方(在 SO 问题或 JMS Serializer Github 上)发现您也可以将“类型”作为上下文传递,$serializer->deserialize($rawXml, 'array<Recurly\Model\Account>', 'xml')
但这只会导致一个空数组......任何人都知道是否可以在没有额外的情况下反序列化数组数据模型?