如何使用 gson 在 android studio 中反序列化 c# http 响应



我已经尝试了很多很多事情,但无济于事。响应由 ASP.NET 服务检索。响应中有一个字段"$id"不在数据库表中。我相信这只是 C# 用来识别字段和响应的索引工具。

下面是 API 响应

[
{
"$id": "1",
"AccountEvaluations": [],
"EvaluationDevelopments": [],
"EvaluationQuestions": [],
"ID": "44e5ecdb-e7b8-412e-8f09-f8e1ec18eeaf",
"TestName": "Psychometric Evaluation"
},
{
"$id": "2",
"AccountEvaluations": [],
"EvaluationDevelopments": [],
"EvaluationQuestions": [],
"ID": "4db4a145-0158-488b-b44d-285ce99111c7",
"TestName": "Numeric Reasoning Evaluation"
},
{
"$id": "3",
"AccountEvaluations": [],
"EvaluationDevelopments": [],
"EvaluationQuestions": [],
"ID": "941495b9-7bc6-4451-bd79-86c31617fa5c",
"TestName": "Comprehesnive Evaluation"
}
]

我删除了其他表(数组(中的数据以简化响应。

我试图用gson解析它的对象类

package com.example.coregradingmobile.ui.Controllers;
import com.google.gson.annotations.SerializedName;
import java.util.HashSet;
public class Evaluations {
@SerializedName("$id")
private String AAA;
@SerializedName("ID")
private String ID;
@SerializedName("TestName")
private String TestName;
@SerializedName("AccountEvaluations")
private HashSet<AccountEvaluations> AccountEvaluations;
@SerializedName("EvaluationDevelopments")
private HashSet<EvaluationDevelopments> EvaluationDevelopments;
@SerializedName("EvaluationQuestions")
private HashSet<EvaluationQuestions> EvaluationQuestions;
public Evaluations()
{
AccountEvaluations = new HashSet<>();
EvaluationDevelopments = new HashSet<>();
EvaluationQuestions = new HashSet<>();
}

public String getAAA() {
return AAA;
}
public void setAAA(String AAA) {
this.AAA = AAA;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getTestName() {
return TestName;
}
public void setTestName(String testName) {
TestName = testName;
}
public HashSet<AccountEvaluations> getAccountEvaluations() {
return AccountEvaluations;
}
public void setAccountEvaluations(HashSet<AccountEvaluations> accountEvaluations) {
AccountEvaluations = accountEvaluations;
}
public HashSet<EvaluationQuestions> getEvaluationQuestions() {
return EvaluationQuestions;
}
public void setEvaluationQuestions(HashSet<EvaluationQuestions> evaluationQuestions) {
EvaluationQuestions = evaluationQuestions;
}
public HashSet<EvaluationDevelopments> getEvaluationDevelopments() {
return EvaluationDevelopments;
}
public void setEvaluationDevelopments(HashSet<EvaluationDevelopments> evaluationDevelopments) {
EvaluationDevelopments = evaluationDevelopments;
}
}

我如何调用 JSON 库来完成它的工作(请注意,请求是 JSON 字符串。这有效(:

Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<Evaluations>>(){}.getType();
Collection<Evaluations> enums = gson.fromJson(request, collectionType);

我收到的错误(还有更多,但这是唯一重要的事情(:

android.content.res.Resources$NotFoundException: String resource ID #0x3

我试过在课堂上乱窜,但似乎没有任何效果。任何帮助将不胜感激。谢谢

尝试添加@Expose注释,工作示例:

app\src\main\assets\js\test.json

[
{
"$id": "1",
"AccountEvaluations": [],
"EvaluationDevelopments": [],
"EvaluationQuestions": [],
"ID": "44e5ecdb-e7b8-412e-8f09-f8e1ec18eeaf",
"TestName": "Psychometric Evaluation"
},
{
"$id": "2",
"AccountEvaluations": [],
"EvaluationDevelopments": [],
"EvaluationQuestions": [],
"ID": "4db4a145-0158-488b-b44d-285ce99111c7",
"TestName": "Numeric Reasoning Evaluation"
},
{
"$id": "3",
"AccountEvaluations": [],
"EvaluationDevelopments": [],
"EvaluationQuestions": [],
"ID": "941495b9-7bc6-4451-bd79-86c31617fa5c",
"TestName": "Comprehesnive Evaluation"
}
]

评价.java

import androidx.annotation.NonNull;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Evaluations {
@Expose
@SerializedName("$id")
private String AAA;
@Expose
@SerializedName("ID")
private String ID;
@Expose
@SerializedName("TestName")
private String TestName;
@NonNull
@Override
public String toString() {
return String.format("%s(", Evaluations.class.getSimpleName()) +
String.format("AAA=%s, ", AAA) +
String.format("ID=%s, ", ID) +
String.format("TestName=%s", TestName) +
")";
}
}

MainActivity.kt例如在 onCreate(( 方法中 - 我在打开的项目中快速测试了它,这就是为什么它是 KOTLIN 文件!

val fileName = "js/test.json"
val fileData = applicationContext.assets.open(fileName).bufferedReader().use{ it.readText() }
val gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
val listType = object : TypeToken<Collection<Evaluations>>(){}.type
val obj = gson.fromJson<Collection<Evaluations>>(fileData, listType)
Log.v("TAG", "obj: " + obj)

日志输出:

obj: [Evaluations(AAA=1, ID=44e5ecdb-e7b8-412e-8f09-f8e1ec18eeaf, TestName=Psychometric Evaluation), Evaluations(AAA=2, ID=4db4a145-0158-488b-b44d-285ce99111c7, TestName=Numeric Reasoning Evaluation), Evaluations(AAA=3, ID=941495b9-7bc6-4451-bd79-86c31617fa5c, TestName=Comprehesnive Evaluation)]

最新更新