【问题标题】:deserialize complicated gson string反序列化复杂的 gson 字符串
【发布时间】:2017-08-22 22:40:05
【问题描述】:

您好希望有人能帮帮我,我正在使用一个 android 应用程序,我已经序列化了以下 gson 对象

截图:

jsonobject 有许多子类,例如:
PreferencialaboraEstudio、Preferencialaboralarea 等更多课程,

我将这个 gson 对象从一个活动转移到一个新活动,为了反序列化这个对象,我在新活动中实现了以下代码:

Intent intent = getIntent();
String Postulado = intent.getStringExtra("Postulado");//Postulado from extra is actually a gson object

Candidato candidato = gson.fromJson(Postulado, Candidato.class);
CandidatoPreferenciaLaboralEstado preflaboraledo = gson.fromJson(Postulado, CandidatoPreferenciaLaboralEstado.class);

我在 CandidatoPreferenciaLaboralEstado 有问题,如图所示,gson 对象中有两个这个类型的类,但是我的代码只返回第一个而不是第二个,有没有办法得到来自 gson 的所有此类“CandidatoPreferenciaLaboralEstado”的项目?

非常感谢您在此问题上的时间和帮助。

【问题讨论】:

  • 据我了解,您有两个对象恰好位于 Postulado 中。我会考虑只使用两个字符串,每个字符串都带有每个对象的 JSON。如果您可以在Postulado 中发布 JSON 的结构,也会很有帮助。
  • 是的 Postulado 是对象,它有很多属性/属性,其中一些是列表,例如 CandidatoPreferenciaLaboralEstado,Gson 对象在这个属性中有两项,所以我需要提取这两项在字符串或列表中键入 CandidatoPreferenciaLaboralEstado,以便稍后在 Textbox 或 ListView 中添加该信息。
  • 我也试过了,但仍然只得到第一项 =/ List listaestados = new ArrayList(); listaestados.add(gson.fromJson(Postulado, CandidatoPreferenciaLaboralEstado.class));
  • 如果可以的话,请给我们CandidatoCandidatoPreferenciaLaboralEstado 的类定义以及intent.getStringExtra("Postulado") 中的JSON,这将真正帮助任何人解决这个问题。在问题中包括所有这些。为简洁起见,从类中删除所有方法。

标签: android serialization gson deserialization


【解决方案1】:

不确定你的根模型如何,但你可以有这样的东西:

public class Postulado {

    private CandidatoPreferenciaLaboralEstado candidatoPreferenciaLaboralEstado;
    private CandidatoSoftware candidatoSoftware;

    public class CandidatoPreferenciaLaboralEstado {
        private List<CandidatoPrefAttributes> candidatoAttributesList;

        public class CandidatoPrefAttributes {
            private Integer cveCandidato;
            private Integer cveCandidatoPreferenciaLaboralEstado;
            //More
        }

    }

    public class CandidatoSoftware {
        private List<CandidatoSoftwareAttributes> candidatoAttributesList;


        public class CandidatoSoftwareAttributes {
            private Integer cveCandidato;
            private Integer cveCandidatoSoftware;
            //More
        }

    }
}

使用各自的吸气剂。

看起来候选(CandidatoPreferenciaLaboralEstado 和 CandidatoSoftware)和候选首选项非常相似,也许您可​​以将模型统一为一个(候选和候选首选项)并使用多个序列化名称,例如:

@SerializedName(value="candidatoPreferenciaLaboralEstado", alternate={"candidatoSoftware"})

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多