JMS反序列化JSON并适合模型类

时间:2015-10-01 23:19:27

标签: symfony jmsserializerbundle jms-serializer

首先,对我的英语感到抱歉..我会尝试以更好的方式表达。

我正在使用JMSSerializerBundle在Symfony 2.7中构建API Rest。 我得到了一个客户模型,地址属性分开:(line1,line2,city,postal_code,state,country_code),当我发送响应时,我这样做:

{
"company_name": "Foograde",
"first_name": "Federico",
"last_name": "Balderas Mata",
"email": "federico.balderas@foograde.com.mx",
"address": {
  "line1": "Gral. Ortega #223D",
  "city": "Celaya",
  "state": "Guanajuato",
  "postal_code": "38010",
  "country_code": "MX"
}}

就像你看到的那样,我在地址对象上发送参数:

/**
 * Get address
 * @VirtualProperty
 * @return array
 * @SerializedName("address")
 */
public function getAddress()
{
    return array(
        'line1' => $this->line1,
        'line2' =>  $this->line2,
        'line2' => $this->line3,
        'city' =>  $this->city,
        'state' => $this->state,
        'postal_code' => $this->postal_code,
        'country_code' => $this->country_code
    );
}

但是现在我要做的是以相同的形式获取请求,使用地址对象并将属性分开以将它们插入数据库中。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为您应该将地址从Customer移动到自己的实体,因此,会有Address entity和Customer实体具有单向manyToMany地址字段。通过这种方式,您可以创建一个地址表单,将其嵌入到客户表单中,您也可以为您准备好验证。

答案 1 :(得分:1)

作为JMSSerializer的文档状态:

  

@VirtualProperty   可以在方法上定义此注释,以指示方法返回的数据应该看起来像对象的属性。

     

注意:这仅适用于序列化,在反序列化期间完全被忽略。

正如xurshid29所述,最好将“地址”移动到一个单独的实体,你可以通过使用序列化组(包括/包含你想要的字段)使json输出保持与以前完全相同

这样,您也可以通过简单地使用JMSSerializer将这些完全相同的数据反序列化回适当的实体,以反序列化json数据。