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

如何使用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",

我试过很多东西,但都没有用。响应由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;
    }
}


我试着在课堂上胡乱摆弄,但似乎什么都不管用。任何帮助都将不胜感激。谢谢

尝试添加@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)]