我尝试在gson的帮助下反序列化一个json字符串。当gson.fromJson我收到以下错误:
类xyz的No-args构造函数;不存在。使用Gson为此类型注册InstanceCreator以解决此问题
我尝试使用InstanceCreate,但我没有运行。 我希望你能帮助我。
JSON字符串
[
{
"prog": "Name1",
"name": "Name2",
"computername": "Name3",
"date": "2010-11-20 19:39:55"
},
{
"prog": "Name1",
"name": "Name2",
"computername": "Name3",
"date": "2010-11-20 12:38:12"
}
根据gson,我必须剪掉第一个和最后一个字符(“[”和“]”) 根据{{3}},字符串与字符正确...:?:
代码如下:
public class License {
public String prog;
public String name;
public String computername;
public String date;
public License() {
this.computername = "";
this.date = "";
this.name = "";
this.prog = "";
// no-args constructor
}
}
String JSONSerializedResources = "json_string_from_above"
try
{
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
JSONObject j;
License[] lic = null;
j = new JSONObject(JSONSerializedResources);
lic = gson.fromJson(j.toString(), License[].class);
for (License license : lic) {
Toast.makeText(getApplicationContext(), license.name + " - " + license.date, Toast.LENGTH_SHORT).show();
}
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
问候克里斯
答案 0 :(得分:2)
尝试将构造函数设为public,以便gson可以实际访问它。
public License() {
this.computername = "";
this.date = "";
this.name = "";
this.prog = "";
// no-args constructor
}
但是由于Java创建了一个默认构造函数,你可以使用:
public class License {
public String prog = "";
public String name = "";
public String computername = "";
public String date = "";
}
<强>更新强>
这真的很简单:JSONObject
期望一个Json对象“{..}”。您应该使用期望“[...]”的JSONArray
。
我尝试了它并且它有效。如上所述,您仍应更改License
课程。
答案 1 :(得分:0)
令人难以置信......
现在我尝试了不是这样
j = new JSONObject(JSONSerializedResources);
lic = gson.fromJson(j.toString(), License[].class);
但直接如此
lic = gson.fromJson(JSONSerializedResources, License[].class);
用我原来的旧json字符串开头和结尾“[”&amp; “]”
并且有效
答案 2 :(得分:-1)
如果您不需要,请尝试删除构造函数 我尝试使用两个类 A类有B类清单
删除了所有构造函数,对我来说工作正常。