反序列化具有不一致名称的对象属性?

时间:2017-05-10 15:45:55

标签: java gson retrofit2

在此处使用Retrofit来使用Google Civic API。

该库要求您创建一个API将返回的模型,就像我已经使用 Election 一样。这基本上是谷歌文档的副本。

(Retrofit将响应属性绑定到具有相同名称的属性)

Election.Java:

public class Election {
private long id;
private String name;
private String electionDay;
private String ocdDivisionId;

public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getElectionDay() {
    return electionDay;
}
public void setElectionDay(String electionDay) {
    this.electionDay = electionDay;
}
public String getOcdDivisionId() {
    return ocdDivisionId;
}
public void setOcdDivisionId(String ocdDivisionId) {
    this.ocdDivisionId = ocdDivisionId;
}

}

但是代表不一致的属性名称,因此我没有看到以某种方式对此进行建模的方法Retrofit将知道如何反序列化API&# 39;的回应。

代表对象(JSON):

property name is called (key)

如何让Retrofit反序列化在分割键之后捕获属性命名变量的模型?

1 个答案:

答案 0 :(得分:0)

假设您正在使用#include<stdio.h> #include<malloc.h> void merge(int a[],int beg,int mid,int end) { int n1=mid-beg+1; int n2=end-mid; int i=0,j=0,k=0; int *p1 = (int*)malloc((n1)*sizeof(int)); int *p2 = (int*)malloc((n2)*sizeof(int)); for(i=0;i<n1;i++) p1[i]=a[beg+i]; for(j=0;j<n2;j++) p2[j]=a[mid+1+j]; i=j=0; for(k=beg;k<=end;k++) { if(p1[i]<=p2[j]) { a[k]=p1[i]; i=i+1; } else { a[k]=p2[j]; j=j+1; } } } void merge_sort(int a[],int beg,int end) { if(beg<end) { int mid=(beg+end)/2; merge_sort(a,beg,mid); merge_sort(a,mid+1,end); merge(a,beg,mid,end); } } void main() { printf("Enter Array of size 10:\n"); int a[10],i; for(i=0;i<10;i++) scanf("\n%d",&a[i]); int n=sizeof a/sizeof a[0]; merge_sort(a,0,n-1); printf("\nSorted array is:\n"); for(i=0;i<10;i++) printf("%d\n",a[i]); } 转换器,我个人会使用地图。我想其他转换器也可以实现同样的效果,但我从未使用它们。假设您有以下对象:

#include <QApplication>
#include <QFileDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString path = QDir::currentPath() + "/myfile.txt";

    QString fileName = QFileDialog::getSaveFileName(0, "Save file",
                                                    path,
                                                    "Music files(*.mp3;;Text files (*.txt)");

    return a.exec();
}

表示Gson数组中的对象。然后你可以上课:

public class Division {
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("alsoKnownAs")
    @Expose
    private List<String> alsoKnownAs = new ArrayList<>();
    @SerializedName("officeIndices")
    @Expose
    private List<Integer> officeIndices = new ArrayList<>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getAlsoKnownAs() {
        return alsoKnownAs;
    }

    public void setAlsoKnownAs(List<String> alsoKnownAs) {
        this.alsoKnownAs = alsoKnownAs;
    }

    public List<Integer> getOfficeIndices() {
        return officeIndices;
    }

    public void setOfficeIndices(List<Integer> officeIndices) {
        this.officeIndices = officeIndices;
    }
}

注意这里使用地图?在幕后,Gson将能够对您的对象进行序列化和反序列化。 Divisions是你在问题中给我们的json的根。

希望这有帮助