{"action":"created","issue":{"url":"https://api.github.com/repos/PHPSC/pagseguro/issues/10","labels_url":"https://api.github.com/repos/PHPSC/pagseguro/issues/10/labels{/name}","comments_url":"https://api.github.com/repos/PHPSC/pagseguro/issues/10/comments","events_url":"https://api.github.com/repos/PHPSC/pagseguro/issues/10/events","html_url":"https://github.com/PHPSC/pagseguro/issues/10","id":39427576,"number":10,"title":"Drop do PHP < 5.5","user":{"login":"lcobucci","id":201963,"avatar_url":"https://avatars.githubusercontent.com/u/201963?v=3","gravatar_id":"","url":"https://api.github.com/users/lcobucci","html_url":"https://github.com/lcobucci","followers_url":"https://api.github.com/users/lcobucci/followers","following_url":"https://api.github.com/users/lcobucci/following{/other_user}","gists_url":"https://api.github.com/users/lcobucci/gists{/gist_id}","starred_url":"https://api.github.com/users/lcobucci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lcobucci/subscriptions","organizations_url":"https://api.github.com/users/lcobucci/orgs","repos_url":"https://api.github.com/users/lcobucci/repos","events_url":"https://api.github.com/users/lcobucci/events{/privacy}","received_events_url":"https://api.github.com/users/lcobucci/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/PHPSC/pagseguro/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":8,"created_at":"2014-08-04T14:50:02Z","updated_at":"2015-11-30T22:26:56Z","closed_at":null,"body":"Algumas decisões de design foram limitadas em função de suportar o PHP 5.3+. \r\n\r\nComo temos o objetivo de seguir as boas práticas de desenvolvimento PHP, bora utilizar a última versão estável!"},"comment":{"url":"https://api.github.com/repos/PHPSC/pagseguro/issues/comments/160781696","html_url":"https://github.com/PHPSC/pagseguro/issues/10#issuecomment-160781696","issue_url":"https://api.github.com/repos/PHPSC/pagseguro/issues/10","id":160781696,"user":{"login":"fagundes","id":169477,"avatar_url":"https://avatars.githubusercontent.com/u/169477?v=3","gravatar_id":"","url":"https://api.github.com/users/fagundes","html_url":"https://github.com/fagundes","followers_url":"https://api.github.com/users/fagundes/followers","following_url":"https://api.github.com/users/fagundes/following{/other_user}","gists_url":"https://api.github.com/users/fagundes/gists{/gist_id}","starred_url":"https://api.github.com/users/fagundes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fagundes/subscriptions","organizations_url":"https://api.github.com/users/fagundes/orgs","repos_url":"https://api.github.com/users/fagundes/repos","events_url":"https://api.github.com/users/fagundes/events{/privacy}","received_events_url":"https://api.github.com/users/fagundes/received_events","type":"User","site_admin":false},"created_at":"2015-11-30T22:26:56Z","updated_at":"2015-11-30T22:26:56Z","body":"@lcobucci valeu a dica, mas o conceito em si de traits eu já entendi, só nunca usei mesmo. :wink: \r\n\r\nPensei numa maneira genérica para resolver o serializer, mas seria utilizando reflexão. Dado um objeto a ser serializado, pegaria os metodos getters, o nome dos elementos (xml) seriam o nome dos atributos, para o valor teria três tratamentos a depender do tipo de dado: \r\n \r\n1. Para tipos básicos (string, int, float): só precisava formatar o valor;\r\n- Para um objeto: seria serializar ele de forma recursiva (porque ele vai ter subelementos);\r\n- Para uma collection (Ex. ItemCollection): não teria um valor, este seria um elemento com uma lista de objetos (cada item da coleção sendo inserido conforme o segundo caso).\r\n\r\nDe qualquer forma, com reflexão daria para resolver isso de maneira genérica, numa classe (ou trait). E as classes que precisam serializadas herdaria essa classe (ou melhor, usaria essa trait).\r\n\r\nUm problema que vi para essa solução é a formatação dos dados, percebi que é feita substrings, cast para int, etc. E que isso varia de campo para campo, provavelmente conforme a especificação da API. Dessa forma uma classe (ou trait) genérica não resolveria isso sozinha, pq nao iria saber como formatar cada campo.\r\n\r\nNão sei se fui claro, mas nada melhor que um código para se auto explicar, assim que eu poder eu faço uma implementação do que eu tentei explicar."}}