如何使用gson在androidstudio中反序列化c#http响应
我试过很多东西,但都没有用。响应由ASP.NET服务检索。响应中有一个字段“$id”不在数据库表中。我相信这只是C#用来识别字段和响应的索引工具 下面是API响应如何使用gson在androidstudio中反序列化c#http响应,c#,android,json,gson,deserialization,C#,Android,Json,Gson,Deserialization,我试过很多东西,但都没有用。响应由ASP.NET服务检索。响应中有一个字段“$id”不在数据库表中。我相信这只是C#用来识别字段和响应的索引工具 下面是API响应 [ { "$id": "1", "AccountEvaluations": [], "EvaluationDevelopments": [], "EvaluationQuestions": [], "ID": "44e5ecdb-e7b8-412e-8f09-f8e1ec18eeaf",
[
{
"$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;
}
}
我试着在课堂上胡乱摆弄,但似乎什么都不管用。任何帮助都将不胜感激。谢谢尝试添加@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"
}
]
Evaluations.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.kte.g inside 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)
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) +
")";
}
}
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)]