Hoi,
Ik heb een ASP.NET Webservice (.asmx file) op mijn webserver geplaatst die een bepaalde JSON string terug geeft. In Java (Android app) heb ik vervolgens wat code die deze webservice aanroept en de JSON string terug geeft.
De JSON die ik in de webservice genereer en die ik dus terug verwacht ziet er zo uit:
Dit stelt 1 enkele User voor met een Id en Username.
Dit probeer ik met Gson vervolgens naar een User object te parsen:
In mijn Android app krijg ik echter dit json object in een "d" object genest:
Voor zover ik kan vinden doet ASP.NET dit automatisch om exploits te voorkomen.
Ok, allemaal leuk en aardig, maar hoe kan ik dit nou mbv Gson parsen? Mijn code werkt nu natuurlijk niet, omdat dit het eerste formaat verwacht (zonder die 'd') maar dat nooit zal krijgen.
Ik heb geprobeerd de json naar een nieuw 'UserDataModel' object te parsen, die een enkele property 'd' heeft van type User:
In plaats van meteen naar een User te parsen, parse ik dus nu naar een "tussen object" (UserDataModel) met die property 'd', die op zijn beurt de User bevat. Ik heb weinig ervaring met Json, maar dit data model lijkt me correct en matched de json die ik krijg, toch?
Dit werkt echter niet. Ik krijg in de 'gson.fromJson' call de volgende error:
Nu is die 'd' opeens weer weg..?! Ik snap het even niet meer...
Wat doe ik fout? Hoe haal ik het object dat ik wil uit die 'd' object dat .NET er automatisch aan toevoegt? Als die 'd' inderdaad altijd aanwezig zal zijn (om exploits te voorkomen) dan moet er toch ook wel iets ingebouwd zijn om die bij het parsen weer te negeren? Dat kan ik echter niet vinden. Het is ook lastig googlen als je keyword een enkele letter 'd' is
Kan iemand hierbij helpen? Ik heb het gevoel dat ik heel dichtbij ben maar zo gaat het niet werken
Ik heb een ASP.NET Webservice (.asmx file) op mijn webserver geplaatst die een bepaalde JSON string terug geeft. In Java (Android app) heb ik vervolgens wat code die deze webservice aanroept en de JSON string terug geeft.
De JSON die ik in de webservice genereer en die ik dus terug verwacht ziet er zo uit:
code:
1
| {"id":9,"username":"testuser"} |
Dit stelt 1 enkele User voor met een Id en Username.
Dit probeer ik met Gson vervolgens naar een User object te parsen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
| public class User { public int id; public String username; public static User fromJson(String json) { Gson gson = new Gson(); User u = gson.fromJson(json, User.class); return u; } } |
In mijn Android app krijg ik echter dit json object in een "d" object genest:
code:
1
| {"d":"{"id":9,"username":"testuser"}"} |
Voor zover ik kan vinden doet ASP.NET dit automatisch om exploits te voorkomen.
Ok, allemaal leuk en aardig, maar hoe kan ik dit nou mbv Gson parsen? Mijn code werkt nu natuurlijk niet, omdat dit het eerste formaat verwacht (zonder die 'd') maar dat nooit zal krijgen.
Ik heb geprobeerd de json naar een nieuw 'UserDataModel' object te parsen, die een enkele property 'd' heeft van type User:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public class User { public int id; public String username; public static User fromJson(String json) { Gson gson = new Gson(); UserDataModel data = gson.fromJson(json, UserDataModel.class); return data.d; } private class UserDataModel { public User d; } } |
In plaats van meteen naar een User te parsen, parse ik dus nu naar een "tussen object" (UserDataModel) met die property 'd', die op zijn beurt de User bevat. Ik heb weinig ervaring met Json, maar dit data model lijkt me correct en matched de json die ik krijg, toch?
Dit werkt echter niet. Ik krijg in de 'gson.fromJson' call de volgende error:
code:
1
| com.google.gson.JsonParseException: Expecting object found: "{\"id\":9,\"username\":\"testuser\"}" |
Nu is die 'd' opeens weer weg..?! Ik snap het even niet meer...
Wat doe ik fout? Hoe haal ik het object dat ik wil uit die 'd' object dat .NET er automatisch aan toevoegt? Als die 'd' inderdaad altijd aanwezig zal zijn (om exploits te voorkomen) dan moet er toch ook wel iets ingebouwd zijn om die bij het parsen weer te negeren? Dat kan ik echter niet vinden. Het is ook lastig googlen als je keyword een enkele letter 'd' is

Kan iemand hierbij helpen? Ik heb het gevoel dat ik heel dichtbij ben maar zo gaat het niet werken