好,
这是持有人对象:
public class ComplexJacksonObject extends baseJsonObject { public int Start; public int Count; public Person MyPerson; public List<String> Strings; public class Person extends baseJsonObject { public String Firstname; public String Lastname; public Address Where; } public class Address extends baseJsonObject { public String Street; public int Number; }}这是我如何初始化它:
ComplexJacksonObject cjo = new ComplexJacksonObject();cjo.Count = 1;cjo.Start = 2;cjo.Strings = new ArrayList<String>();cjo.Strings.add("One");cjo.Strings.add("Two");cjo.MyPerson = cjo.new Person();cjo.MyPerson.Firstname = "Fi",=[]{}rst";cjo.MyPerson.Lastname = "Last";cjo.MyPerson.Where = cjo.new Address();cjo.MyPerson.Where.Street = "Street";cjo.MyPerson.Where.Number = 15;String result = cjo.toQueryString(); // Strings=%5B%22One%22%2C%22Two%22%5D&MyPerson=%7BFirstname%3A"Fi%5C%5C%22%2C%3D%5B%5D%7B%7Drst"%2CLastname%3A%22Last%22%2CWhere%3A%7BStreet%3A%22Street%22%2CNumber%3A15%7D%7D&Start=2&Count=1最后,使这种情况发生的方法:
public String toQueryString() { StringBuilder sb = new StringBuilder(); for (Field field : this.getClass().getDeclaredFields()) { if (sb.length() > 0) { sb.append("&"); } Class cls = field.getType().getSuperclass(); // serializing my complex objects - they all inherit from baseJsonObject class if (cls != null && cls.equals(baseJsonObject.class)) { baseJsonObject bjo = (baseJsonObject) getFieldValue(field); String str = toJson(bjo, true); sb.append(field.getName()).append("=").append(Uri.enpre(str)); } // serializing lists, they are all List<T> else if (field.getType().equals(List.class)) { List bjo = (List) getFieldValue(field); String val = toJson(bjo, false); sb.append(field.getName()).append("=").append(Uri.enpre(val)); } // serializing simple fields else { Object bjo = getFieldValue(field); String val = toJson(bjo, false).replaceAll("^"|"$", ""); sb.append(field.getName()).append("=").append(Uri.enpre(val)); } } return sb.toString();}private Object getFieldValue(Field field) { try { return field.get(this); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null;}private static ObjectMapper generateMapper() { ObjectMapper om = new ObjectMapper(); // om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); om.setDateFormat(new JacksonSimpleDateFormat()); return om;}public String toJson() { try { return generateMapper().writevalueAsString(this); } catch (JsonProcessingException e) { e.printStackTrace(); return null; }}public String toJson(Object o, boolean noQuoteProperties) { try { ObjectMapper om = generateMapper(); if (noQuoteProperties) { om.configure(com.fasterxml.jackson.core.JsonGenerator.Feature.QUOTE_FIELD_NAMES, false); om.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); } return om.writevalueAsString(o); } catch (JsonProcessingException e) { e.printStackTrace(); return null; }}


