Look at what you are doing:
string json = JsonConvert.SerializeObject(c1, Formatting.Indented);
File.WriteAllText(path_combined, json);
string json2 = JsonConvert.SerializeObject(c2, Formatting.Indented);
File.WriteAllText(path_combined, json2);
WriteAllText does what it says: creates a new file containing exactly the string it is passed. If a file of the same name exists, it is deleted first. So the file will only ever contain the one set of JSON values for class2, the class1 data will be discarded.