I ran into a strange problem, I am very new to Android and Json. I am using RESTful WCF, which shows a json response similar to this:
{"StatusCode":200,"Message":"","Result":{"Agencies":[],"Areas":[{"id":11,"area_name":"area 10","description":"updated 10","active":true},{"id":12,"area_name":"Area 11","description":"temp 11","active":true},{"id":13,"area_name":"Area 12","description":"temp12","active":true},{"id":14,"area_name":"area 13","description":"temp 13 3","active":true},{"id":7,"area_name":"Area 6","description":"temp6","active":true},{"id":8,"area_name":"area 7","description":"temp7","active":true},{"id":9,"area_name":"area 8","description":"temp 8","active":true},{"id":10,"area_name":"area 9","description":"temp 9","active":true},{"id":1,"area_name":"area1","description":"temp","active":true},{"id":3,"area_name":"area2","description":"temp2","active":true},{"id":4,"area_name":"area3","description":"asdddasdsa","active":true},{"id":5,"area_name":"area4","description":"dasdassad","active":true},{"id":6,"area_name":"area5","description":"temp5","active":true}],"Districts":[{"id":5,"district_name":"District 5","district_code":"1","description":"temp 5","area_id":8,"area_name":"area 7","active":true},{"id":4,"district_name":"district 4","district_code":"2","description":"temp 4","area_id":8,"area_name":"area 7","active":true},{"id":1,"district_name":"district 1","district_code":"1","description":"descrp","area_id":10,"area_name":"area 9","active":true},{"id":2,"district_name":"district 2","district_code":"1","description":"descrp","area_id":10,"area_name":"area 9","active":true},{"id":3,"district_name":"district 3","district_code":"1","description":"temp 3","area_id":5,"area_name":"area4","active":true}],"FacilityOccupacies":[{"id":1,"facility_name":"C","description":"Computer facility","active":true},{"id":2,"facility_name":"CA","description":"Adult correctional facility","active":true},{"id":3,"facility_name":"CJ","description":"Juvenile correctional facility","active":true},{"id":4,"facility_name":"GS","description":"Garage for operations support, including vehicle maintenance, repair or fuel depot","active":true},{"id":5,"facility_name":"GP","description":"Garage for parking","active":true},{"id":6,"facility_name":"I","description":"Light industrial facility","active":true},{"id":7,"facility_name":"L","description":"Library","active":true},{"id":8,"facility_name":"M","description":"Medical facilities such as clinics, infirmaries or hospitals","active":true},{"id":9,"facility_name":"N","description":"Non-categorized facility","active":true},{"id":10,"facility_name":"OM","description":"Office buildings where approximately 75% or more of occupants are senior level managers","active":true},{"id":11,"facility_name":"OS","description":"Office building","active":true},{"id":12,"facility_name":"SP","description":"Primary school","active":true},{"id":13,"facility_name":"SS","description":"Secondary school","active":true},{"id":14,"facility_name":"U","description":"University","active":true},{"id":15,"facility_name":"W","description":"Warehouse","active":true}],"FireSprinkler":[{"id":2,"fire_sprinkler":"N","description":"A lack of a fire sprinkler fire suppression system.","active":true},{"id":3,"fire_sprinkler":"P","description":"A partial fire sprinkler fire suppression system.","active":true},{"id":1,"fire_sprinkler":"Y","description":"A full fire sprinkler fire suppression system.","active":true}],"FoundSources":[{"id":1,"found_source_name":"COP","description":"Certificates of Participation","active":true},{"id":2,"found_source_name":"COSF","description":"Capital Outlay Stabilization Fund","active":true},{"id":6,"found_source_name":"Exempt","description":"Exempt From Rent","active":true},{"id":4,"found_source_name":"GF","description":"Capital Outlay Stabilization Fund","active":true},{"id":5,"found_source_name":"N/A","description":"Not Applicable","active":true},{"id":3,"found_source_name":"PLTO","description":"Private Lease-To-Own","active":true}],"Locations":[{"id":1,"location_name":"location 1","location_code":"1","description":"temp 1","district_id":3,"district_name":"district 3","active":true}],"MarshallSwift":[{"id":1,"class":"A","frame":"Structural steel columns and beams fire proofed with masonry, concrete, plaster, or other incombustible material.","floor":"Concrete or concrete covered steel deck, fire-proofed.","roof":"Concrete or concrete covered steel deck,fire-proofed.","walls":"Non-bearing curtain walls, masonry, concrete, metal, and glass panels, stone.","active":true},{"id":2,"class":"B","frame":"Reinforced concrete columns and beams.","floor":"Concrete or concrete covered steel deck, fire-proofed.","roof":"Concrete or concrete covered steel deck, fire-proofed.","walls":"Non-bearing curtain walls, masonry, concrete, metal, and glass panels, stone.","active":true},{"id":3,"class":"C","frame":"Structural steel columns and beams fire-proofed with masonry, concrete, plaster, or other incombustible material.","floor":"Concrete or concrete covered steel deck, fire-proofed.","roof":"Wood or steel joist, wood or steel deck.","walls":"Brick, concrete block, or tile masonry, tilt-up formed concrete.","active":true},{"id":4,"class":"D","frame":"Wood or steel studs in bearing wall, wood or steel skeleton frame.","floor":"Wood or steel floor joists or slabs on ground.","roof":"Wood or steel joist, wood or steel deck.","walls":"Almost any material except masonry or concrete. May have masonry veneer over steel or wood framing.","active":true},{"id":5,"class":"S","frame":"Steel β No fire protection.","floor":"Concrete","roof":"Steel β No fire protection.","walls":"Steel β No fire protection.","active":true}],"Profiles":[{"id":1,"profile_name":"Administrator","description":"System Administrator","active":true},{"id":2,"profile_name":"Inspector","description":"Building Inspector","active":true}],"ProjectCategories":[{"id":1,"category_name":"Fire/Life Safety","description":"Fire/Life Safety","active":true},{"id":2,"category_name":"HVAC","description":"HVAC","active":true},{"id":3,"category_name":"Infrastructure","description":"Infrastructure","active":true},{"id":4,"category_name":"Interior Renovation","description":"Interior Renovation","active":true},{"id":5,"category_name":"Shell","description":"Shell","active":true},{"id":6,"category_name":"Energy Consv","description":"Energy Consv","active":true},{"id":7,"category_name":"ADA Access","description":"ADA Access","active":true},{"id":8,"category_name":"Building Services","description":"Building Services","active":true},{"id":9,"category_name":"NONE","description":"NONE","active":true}],"Projects":[],"Structures":[]}}
I am trying to deserialize it to a complex object using Jackson 1.9.11.
Therefore i use
final ObjectMapper mapper = new ObjectMapper(); RawResult<RawCatalogs> oResult = mapper.readValue(strResponse, new TypeReference<RawResult<RawCatalogs>>() {});
Where RawResult is a class with a template and RawCatalogs, its class with nested objects, it was used to deserialize the response correctly, but now it shows an error in the header.
The definition of classes is (I donβt know if information about nested classes is needed for full support? I think I outlined them very well, just sending importers for clarity)
import org.codehaus.jackson.annotate.JsonCreator; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; final public class RawResult<T> { private final Integer _StatusCode; private final Boolean _Status; private final String _Message; private final T _Result; public RawResult(Class<T> oClass) throws InstantiationException, IllegalAccessException { _StatusCode = null; _Message = null; _Result = BuildGeneric(oClass); _Status = false; } @JsonCreator public RawResult( @JsonProperty("StatusCode") Integer StatusCode, @JsonProperty("Message") String Message, @JsonProperty("Result") T Result) { _StatusCode = StatusCode; _Message = Message; _Result = Result; _Status = StatusCode == 200; } private T BuildGeneric(Class<T> oClass) throws InstantiationException, IllegalAccessException { return oClass.newInstance(); } @JsonProperty("StatusCode") public Integer get_StatusCode() { return _StatusCode; } @JsonProperty("Message") public String get_Message() { return _Message; } @JsonProperty("Result") public T get_Result() { return _Result; } @JsonIgnore public Boolean get_Status() { return _Status; } }
public interface ICatalog { String _Id = null; String _Description = null; boolean _Active = false; public String get_Id(); public String get_Description() ; public boolean is_Active() ; }
public abstract class RawCatalog implements ICatalog { protected final String _Id; protected final String _Description; protected final String _Name; protected final boolean _Active; public RawCatalog(String Id, String Description,String Name, boolean Active) { _Id = Id; _Description = Description; _Name = Name; _Active = Active; } @JsonProperty("id") public String get_Id() {
public final class RawAgency extends RawCatalog { private final String _AgencyCode; private final String _LocationId; private final String _LocationName; private final int _NumberOfStructures; @JsonCreator public RawAgency( @JsonProperty("id") String Id, @JsonProperty("description") String Description, @JsonProperty("agency_name") String Name, @JsonProperty("active") Boolean Active, @JsonProperty("agency_code") String AgencyCode, @JsonProperty("get_LocationId") String LocationId, @JsonProperty("get_LocationName") String LocationName, @JsonProperty("get_NumberOfStructures") int NumberOfStructures ) { super(Id, Description, Name,Active); _AgencyCode = AgencyCode; _LocationId = LocationId; _LocationName = LocationName; _NumberOfStructures = NumberOfStructures; } @JsonProperty("agency_name") @Override public String get_Name() { return super.get_Name(); } @JsonProperty("agency_code") public String get_AgencyCode() { return _AgencyCode; } @JsonProperty("location_id") public String get_LocationId() { return _LocationId; } @JsonProperty("number_of_structures") public int get_NumberOfStructures() { return _NumberOfStructures; } @JsonProperty("location_name") public String get_LocationName() { return _LocationName; } }
import java.util.List; import org.codehaus.jackson.annotate.JsonCreator; import org.codehaus.jackson.annotate.JsonProperty; final public class RawCatalogs { private final List<RawAgency> _Agencies; private final List<RawArea> _Areas; private final List<RawDistrict> _Districts; private final List<RawFacilityOccupacy> _FacilityOccupacies; private final List<RawFireSprinkler> _FireSprinklers; private final List<RawFoundSources> _FoundSources; private final List<RawLocation> _Locations; private final List<RawMarshallSwift> _MarshallSwifts; private final List<RawProfile> _Profiles; private final List<RawProjectCategory> _ProjectCategories; private final List<RawProject> _Projects; private final List<RawStructure> _Structures; @JsonCreator public RawCatalogs( @JsonProperty("Agencies") List<RawAgency> Agencies, @JsonProperty("Areas") List<RawArea> Areas, @JsonProperty("Districts") List<RawDistrict> Districts, @JsonProperty("FacilityOccupacies") List<RawFacilityOccupacy> FacilityOccupacies, @JsonProperty("FireSprinkler") List<RawFireSprinkler> FireSprinklers, @JsonProperty("FoundSources") List<RawFoundSources> FoundSources, @JsonProperty("Locations") List<RawLocation> Locations, @JsonProperty("MarshallSwift") List<RawMarshallSwift> MarshallSwifts, @JsonProperty("Profiles") List<RawProfile> Profiles, @JsonProperty("ProjectCategories") List<RawProjectCategory> ProjectCategories, @JsonProperty("Projects") List<RawProject> Projects, @JsonProperty("Structures") List<RawStructure> Structures ) { _Agencies = Agencies; _Areas = Areas; _Districts = Districts; _FacilityOccupacies = FacilityOccupacies; _FireSprinklers = FireSprinklers; _FoundSources = FoundSources; _Locations = Locations; _MarshallSwifts = MarshallSwifts; _Profiles = Profiles; _ProjectCategories = ProjectCategories; _Projects = Projects; _Structures = Structures; } @JsonProperty("Agencies") public List<RawAgency> get_Agencies() { return _Agencies; } @JsonProperty("Areas") public List<RawArea> get_Areas() { return _Areas; } @JsonProperty("Districts") public List<RawDistrict> get_Districts() { return _Districts; } @JsonProperty("FacilityOccupacies") public List<RawFacilityOccupacy> get_FacilityOccupacies() { return _FacilityOccupacies; } @JsonProperty("FireSprinkler") public List<RawFireSprinkler> get_FireSprinklers() { return _FireSprinklers; } @JsonProperty("FoundSources") public List<RawFoundSources> get_FoundSources() { return _FoundSources; } @JsonProperty("Locations") public List<RawLocation> get_Locations() { return _Locations; } @JsonProperty("MarshallSwift") public List<RawMarshallSwift> get_MarshallSwifts() { return _MarshallSwifts; } @JsonProperty("ProjectCategories") public List<RawProfile> get_Profiles() { return _Profiles; } @JsonProperty("Profiles") public List<RawProjectCategory> get_ProjectCategories() { return _ProjectCategories; } @JsonProperty("Projects") public List<RawProject> get_Projects() { return _Projects; } @JsonProperty("Structures") public List<RawStructure> get_Structures() { return _Structures; } }
So my question is why is it showing this error? I was looking for similar questions about stackoverflow, everything seemed to be about a coding error, but this is not the same code error, nor do I control WCF.
In fact, if I copy the Json Respone paste into this page , it seems well formed.
I also tried using mapper.configure, but none of the Jsonparser functions worked
What am I doing wrong?