Unable to deserialize an object from JSON

21 views
Skip to first unread message

sandeepgiri

unread,
Apr 24, 2009, 8:04:26 AM4/24/09
to google-gson
Dear Members,

I have recently adopted GSON and I like it.
I have two classes:

class SelectedFileInfo
{
public SelectedFileInfo(){}
int repoFileId;
String name;
}
class SelectedFilesInput
{
public SelectedFilesInput(){}
SelectedFileInfo[] added;
Hashtable<Integer, SelectedFileInfo> updated;
}

//I am first constructing the SelectedFilesInput object and then
serializing it to JSON and
// then trying to load deserialize
SelectedFilesInput sfi1 = new SelectedFilesInput();
sfi1.added = new SelectedFileInfo[1];
SelectedFileInfo addedFile = new SelectedFileInfo();
addedFile.name = "file1.txt";
addedFile.repoFileId = 1;
sfi1.added[0] = addedFile;

sfi1.updated = new Hashtable<Integer, SelectedFileInfo>();
SelectedFileInfo fi1 = new SelectedFileInfo();
fi1.name = "file.txt";
fi1.repoFileId = 10;

sfi1.updated.put(1, fi1);

SelectedFileInfo fi2 = new SelectedFileInfo();
fi2.name = "file2.txt";
fi2.repoFileId = 12;

sfi1.updated.put(2, fi2);
String jsonStr = gson.toJson(sfi1);

//Here jsonStr is
//{"added":[{"repoFileId":1,"name":"file1.txt"}],"updated":{"2":
{"repoFileId":12,
// "name":"file2.txt"},"1":{"repoFileId":10,"name":"file.txt"}}}

SelectedFilesInput sf2 = gson.fromJson(jsonStr,
SelectedFilesInput.class);

I am getting the following error:
Exception in thread "main" java.lang.IllegalArgumentException
at sun.reflect.UnsafeObjectFieldAccessorImpl.set
(UnsafeObjectFieldAccessorImpl.java:63)
at java.lang.reflect.Field.set(Field.java:656)
at
com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler
(JsonObjectDeserializationVisitor.java:107)
at com.google.gson.ObjectNavigator.navigateClassFields
(ObjectNavigator.java:135)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:116)
at com.google.gson.JsonDeserializationContextDefault.fromJsonObject
(JsonDeserializationContextDefault.java:75)
at com.google.gson.JsonDeserializationContextDefault.deserialize
(JsonDeserializationContextDefault.java:49)
at com.google.gson.Gson.fromJson(Gson.java:373)
at com.google.gson.Gson.fromJson(Gson.java:321)
at com.google.gson.Gson.fromJson(Gson.java:297)
at TestGson.main(TestGson.java:38)

Any ideas?

Regards,
Sandeep Giri
Reply all
Reply to author
Forward
0 new messages