2016-03-31 17 views
2

Bir JSON'u varlık ilişkisi olan bir nesneye serileştirmek istiyorum.json öğesinin varyasyonlarını desterleştirmek

gelen JSON veri


    { 
      "name": "john", 
      "books": [ 
      { 
       "title": "My life" 
      } 
      ] 
    } 

bu

$object = $this->get('serializer')->deserialize($jsonData, 'Author', 'json'); 

gibi json seri kaldırma sonucu

Author { #name: 'john' #books: array:1 [ 0 => array:1 [ "title" => "My life" ] ] } 

Bu

gibi bir nesneye serisini istiyoruz olan 210

Neden serileştirmenin kitapçıktan vazgeçilemediğini anlıyorum. JMSSerialzerBundle ile, bu durumu çözmek için Tür ek açıklaması vardır.

Symfony Serializer bileşeniyle yapmak mümkün mü ya da bunun için JMSSerializer kullanmalı mıyım? Yardımlarınız için

teşekkürler;)

Benim nesneleri


class Author 

    { 
     private $name; 

     private $books; 

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

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

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

     /** 
     * @param mixed $books 
     */ 
     public function setBooks(array $books) 
     { 
      $this->books = $books; 
     } 
    } 

    class Book 
    { 
     private $title; 

     private $author; 

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

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

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

     /** 
     * @param mixed $author 
     */ 
     public function setAuthor(Author $author) 
     { 
      $this->author = $author; 
     } 
    } 

+0

Ne özellikle yapmak istiyorsunuz:

Ayrıca API Platform bulunan benzer uygulama kısmına göz atabilirsiniz? Bir dinlenme API'sine bazı veriler gönderilsin mi? – Tobias

+0

Sadece dinlenmek için bir doktrin dbal sürücü var, bu yüzden hemen hemen her şey umurumda değil – Tobias

+0

@Tobias bir web hizmeti "API gibi" uygulamak, ancak verileri sürdürmek için doktrin kullanmıyorum. Verileri kısıtlama ihlalleriyle bir nesneye (varlık ilişkileriyle birlikte) seri hale getirmek istiyorum. – guns17

cevap

1

Guilhem haklı :-) size yardımcı olacağını umuyoruz, varsayılan Symfony'nin ObjectNormalizer şimdilik olmayan sayıl tiplerinin özelliklerini normalleştirmek mümkün değildir.

Ancak bu özellik Symfony 3.1 ekleniyor: https://github.com/symfony/symfony/pull/17660 arada

, projenizde yukarıda bağlantılı PR sağlanan ObjectNormalizer sürümünü yapıştırın/kopyalayabilirsiniz.

1

symfony serileştirici karmaşık özelliklerini denormalize olamaz.

Bunu yapmanın tek yolu kendiniz nesne denormalization yönetmek olduğunu düşünüyorum:

use Symfony\Component\Serializer\Normalizer\DenormalizableInterface; 
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; 

class Author implements DenormalizableInterface { 
    public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = array()) { 
     if (isset($data['name'])) { 
      $this->setName($data['name']); 
     } 
     if (isset($data['books']) && is_array($data['books'])) { 
      $books = array(); 
      foreach ($data['books'] as $book) { 
       $books[] = $denormalizer->denormalize($book, Book::class, $format, $context); 
      } 
      $this->setBooks($books); 
     } 
    } 

    // ... 
} 

Ayrıca, özel normalleyici oluşturabilir ancak bu daha karmaşıktır (eğer this article bakmak hangi Bunu nasıl yapacağını daha fazla veya daha az açıklar).

Bu

+0

Teşekkürler @Guilhem bunu deneyeceğim – guns17

İlgili konular