My situation is this: Object TableC has 4 fields. Only 3 fields ( field_C1 , field_C2 and field_C3 ) are read from the JSON string. The fourth field field_C4 defined inside the object with a default value.
When I serialize an instance of an object (for output) - it ignores the field_C4 field, I was expecting a default value of "1" or "null" . When I explicitly define the value for the instance field in the program for "NEW" , it includes it in the Json output line.
Looking at the output, it looks like the constructor is also ignored when an instance of the object is created during deserialization.
What would be the best way to activate other fields for an instance of an object - which are not included in the deserialized version of Json String input?
package newpackage; import java.util.List; import com.google.gson.*; public class jsonwithconstructor { public static void main(String[] args) throws ClassNotFoundException { String jsonstring = "{'TableC':[" + "{'field_C1':'C_11','field_C2':'C_12','field_C3':'C_13'}," + "{'field_C1':'C_21','field_C2':'C_22','field_C3':'C_23'}" + "]}"; jsonstring = jsonstring.replace('\'', '"'); System.out.println(jsonstring); RootObject root = new GsonBuilder().create().fromJson(jsonstring, RootObject.class); for (int i=0; i < root.TableC.size(); i++){ System.out.println(root.TableC.get(i)); } System.out.println();
The result is shown below:
{"TableC":[{"field_C1":"C_11","field_C2":"C_12","field_C3":"C_13"},{"field_C1":"C_21","field_C2":"C_22","field_C3":"C_23"}]} TableC, C_11, C_12, C_13, null TableC, C_21, C_22, C_23, null TableC, C_11, C_12, C_13, NEW TableC, C_21, C_22, C_23, null {"TableC":[{"field_C1":"C_11","field_C2":"C_12","field_C3":"C_13","field_C4":"NEW"},{"field_C1":"C_21","field_C2":"C_22","field_C3":"C_23"}]}