【问题标题】:How to work with dynamic SerializedName annotation?如何使用动态 SerializedName 注释?
【发布时间】:2019-09-25 04:35:04
【问题描述】:

我有一个 json,我在领域模型中通过注释 @SerializedName 使用 gson 进行转换。

但有时在 json 中有一个未知键,我想将其序列化为字符串。

public class example extend Realmobject{
@SerializedName("example1")
@Expose
private String exampleNr1;
@SerializedName("example2")
@Expose
private String exampleNr2;


private String someOtherValue;
Getter / Setter here...

}

Json 是这样的

[
{
"example1": "1234",
"example2": "1234",
"x": "dynamic"}, {
"example1": "1454",
"example2": "165456",
"xy": "dynamic"}]

现在我将序列化 x 和 xy 键(有时被命名为 xyz 等等)到 someOtherValue 字符串。 在@SerializedName(value="", alternate={""}) 我没有机会,因为,我不知道该字段的名称。

i 序列化这个 列表 woList = gson.fromJson(parentArray, new TypeToken>() {}.getType());

【问题讨论】:

    标签: java android gson realm


    【解决方案1】:

    您可以先将其转换为 JSONObject。然后,您可以遍历 JSONObject 中的一组键。

        JSONObject json = gson.fromJson(stringJson, JSONObject.class);
        Iterator<String> set = json.keys();
        while(set.hasNext()) {
            String dynamicAttributeName = set.next();
        }
        json.get(dynamicAttributeName); //to get the value 
    

    【讨论】:

    • 这是一个很好的方法,但我有一个包含超过 100000 个对象的数组,使用这种方法,速度和性能下降。我需要一个技巧来操作@serializedname 字符串,这样我就不会进入对象 du 控制键。我在 json 到来之前得到了未知的密钥,帮忙吗?
    • 一定有办法让你找出API返回的所有可能的属性名称?
    • 如果有 100000 个对象,则放弃 GSON 并使用流式 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多