¿Por qué GSON uso SÓLO campos(private,public,protected)?
Hay una manera de decirle a GSON utilizar sólo getters y setters?

InformationsquelleAutor Zemzela | 2011-06-01

4 Comentarios

  1. 90

    General al serializar/deserializar un objeto, que está haciendo para terminar con una copia exacta del estado del objeto, y Como tal, en general, usted quiere eludir la encapsulación normalmente deseadas en un diseño OO. Si no eludir la encapsulación, puede no ser posible para terminar con un objeto que tiene el mismo estado después de deserialización que tenía antes de la serialización. Además, considere el caso de que usted no desea proporcionar un setter para una propiedad en particular. ¿Cómo debería de serialización/deserialización de la ley si usted está trabajando a través de los getters y setters?

    • ¿Qué hay de «campos calculados» queremos ofrecer al mundo externo ? En tu forma de pensar, que debo crear un campo y actualización de este campo cada vez que la actualización de uno de mis POJO campos ? Urgh…
    • Estoy realmente sólo destacando las dificultades introducidas por el uso de propiedad getters y setters para la serialización; Calcula las propiedades de introducir sus propios problemas así. Por ejemplo, si le das a alguien un objeto serializado, luego de que la actualización de la calcula el valor de la propiedad y pasar de nuevo a usted, cómo debe ser la aplicación de la manija de la deserialización? Pretender que la propiedad no se ha actualizado o lanzar una excepción? También, si la actualización de las propiedades en las cuales la propiedad calculada se basa, el estado del objeto es en realidad no válido, y la lectura que el valor de la propiedad es plana mal.
    • Estoy de acuerdo con @Frédéric; hay algunos casos de borde que ameritan el uso de propiedades vicepresidente campos. Me encontré en una donde tengo una matriz de bytes en un objeto que me gustaría excluir y en lugar de devolver una Cadena. Ahora me quedo con la adaptación del objeto a través del DTO.
    • Calcula/derivados de los campos debe ser etiquetados transient por lo que no son serializados, y se vuelven a calcular en la solicitud.
    • Generalmente cuando me serialise un objeto JSON, lo estoy haciendo decir a la otra parte de algo. Generalmente cuando me deserialise un objeto JSON, lo estoy haciendo porque alguien me lo enviara en JSON. Todas las clases del modelo en nuestro sistema están escritos como sólo una interfaz y, a continuación, utilizando la reflexión proxies de aplicación. Tratando de serialise los campos en esta situación es simplemente tonto – serialising las propiedades hubiera hecho una reflexión proxy indistinguible de un manualmente codificados bean (que es una buena cosa.)
    • Esto está bien si el caso de uso es la de Java para Java seriación, pero una muy común el caso de uso es para exponer objetos Java como resultado de una api REST de la llamada, en ese caso por el lado de Java no necesitamos dos manera perfecta la seriación, mucho más a menudo de lo que nos quieren ocultar campos y serialise (y deserialise cuando sea necesario) específicos, a menudo el tiempo de ejecución se calcula, propiedades.
    • Tener la capacidad de decirle a un serializador de utilizar los getters y setters para una clase dada, permitiría a la Hibernación de validación de un setter parámetro.
    • yo sólo tenía que lidiar con un transitorio campo calculado el día de hoy. Acabo calculado en el captador si null.
    • Si desea utilizar su Getter/Setter tan malo que sólo podría proporcionar un serializador personalizado. Yo lo hago todo el tiempo y es muy sencillo y simple (Tutorial sites.google.com/site/gson/…). A menudo tengo algunas fromJson-Método dentro del propio Objeto

  2. 24

    Hay una manera de decirle a GSON utilizar sólo getters y setters?

    Todavía no.

    De el diseño de doc:

    [T]aquí hay buenos argumentos para apoyar propiedades. Tenemos la intención de mejorar Gson en una última versión compatible con propiedades como una alternativa a la asignación para el modulo de Json campos. Por ahora, Gson es campos-basado.

    • Sobre Gson apoyo para getters y setters, la última actualización de la lista de correo es que «[t]él las perspectivas de este tipo de característica de decisiones en Gson son bastante bajas…» groups.google.com/forum/#!tema/google-gson/4G6Lv9PghUY
    • No creo que no se debe usar getters y setters, Chris Shaffer lo explica muy bien en esta respuesta.
    • Es 3 años más tarde. Las actualizaciones?
    • Escribir un serializador personalizado/deserializer, de esa manera usted puede utilizar cualquier método que desea escribir los valores en su clase.
    • Esta respuesta es muy antiguo, stackoverflow necesita algún tipo de «Recolector de Basura» que tales respuestas.
    • Es 6 años más tarde. Las actualizaciones?
    • nope. La respuesta sigue siendo válida.
    • Creo que es seguro asumir que ellos no añadir esta función en este punto.
    • Es 8 años más tarde, las actualizaciones?

  3. 0

    El vago contorno de cómo funciona esto en nuestra aplicación, es que tenemos un montón de TypeAdapter implementación de algunos de valor específico-como objetos y algunos de frijol estilo de los objetos, donde sabemos que JavaBeans lógica de trabajo. Luego nos atasco de todos estos en una GsonBuilder antes de la creación de la Gson objeto.

    Por desgracia, GSON es realmente una mierda en el manejo de tipos como Object[]. Principalmente nos vio esto cuando estábamos tratando de hacer que un objeto JSON para representar los parámetros del método. La solución para que iba a hacer personalizada TypeAdapter de los casos que se reflejan los métodos. (Esto significa que terminan usando uno Gson instancia por cada método tiene intención de llamar…)

    • ¿Cómo le sensfully manejar deserializar nada al Objeto? ¿Cómo te gustaría que adivinar lo que es para deserializar es?
    • Para el Objeto, o para polimórficos cosas en general, tal vez podrían tener un registro de atributos que el adaptador originalmente serializada de ella. Pero a partir de la memoria, creo que incluso obvia cosas como {«a»,2,»b»} no deserialise a Object[].

Dejar respuesta

Please enter your comment!
Please enter your name here