/ / Concluindo a construção de objetos após a desserialização do GSON - java, android, json, gson

Concluindo a construção do objeto após a desserialização do GSON - java, android, json, gson

Comecei com sucesso o uso do GSON para serializar e desserializar uma hierarquia de objetos no meu aplicativo Android.

Alguns dos objetos que estão sendo serializados têm membros que devo marcar como transient (ou use anotações GSON alternativas paraimpedir que sejam serializados) porque são referências a objetos que não quero serializar como parte da sequência JSON de saída. Essas referências são a objetos que devem ser construídos separadamente por outros meios.

Depois que a estrutura é desserializada de volta para objetos Java, em algum momento eu preciso preencher essas referências. Eu poderia fazer isso facilmente, talvez usando uma série de setXXX() type métodos, mas até que isso seja feito, esses objetos estão em um estado incompleto. O que me pergunto é se existe uma abordagem mais robusta para isso.

Maneiras em que pensei até agora:

  • Faça com que os objetos joguem um RuntimeException (ou algo mais adequado) se eles "estiverem em um estado incompleto; isto é, se eles forem solicitados a fazer algum trabalho quando algum método de inicialização não for chamado".

  • Separe os bits serializáveis ​​em umobjeto de modelo de dados separado. Em outras palavras, retire o que não pode ser serializado. Após a desserialização do GSON, crie meus objetos "reais" usando esses objetos de dados em sua composição. Isso parece derrotar a conveniência de usar o GSON.

  • Escreva um desserializador personalizado para o GSON para lidar com a criação especial desses objetos.

Respostas:

6 para resposta № 1

Eu provavelmente adotaria a segunda abordagem, porqueComo normalmente projeto meus aplicativos, qualquer coisa que precise ser serializada / desserializada é na verdade apenas dados antigos simples ou POJOs, se você preferir. Se eu precisar me customizar / configurar a API de serialização para fazer o que eu quero, tendem a simplificar o que está sendo serializado, para que a API de serialização não precise de configurações extras.

Então, se eu tiver um modelo de dados mais complicado,partes das quais não devem ser serializadas / desserializadas, extrao dele um conjunto mais simples de POJOs, como um modelo de dados conceitualmente separado para participar da serialização / desserialização. Isso realmente exige uma etapa extra para mapear entre as duas modelos de dados, mas isso geralmente é bastante simples também.

Se a terceira abordagem for preferida, observe também o recurso Criador de Instâncias, pois pode fornecer outro gancho útil para personalizar o processo de desserialização.


9 para resposta № 2

Confira https://github.com/julman99/gson-fire

É uma biblioteca que fiz que estende o Gson para lidar com casos como pós-serialização e pós-desserialização

Além disso, possui muitos outros recursos interessantes que eu precisei ao longo do tempo com o Gson.