private static void MergeRecur(JSONObject left, JSONObject right) { if (left.type == Type.NULL) { left.Absorb(right); } else if (left.type == Type.OBJECT && right.type == Type.OBJECT) { for (int i = 0; i < right.list.Count; i++) { string text = right.keys[i]; if (right[i].isContainer) { if (left.HasField(text)) { JSONObject.MergeRecur(left[text], right[i]); } else { left.AddField(text, right[i]); } } else if (left.HasField(text)) { left.SetField(text, right[i]); } else { left.AddField(text, right[i]); } } } else if (left.type == Type.ARRAY && right.type == Type.ARRAY && right.Count <= left.Count) { for (int j = 0; j < right.list.Count; j++) { if (left[j].type == right[j].type) { if (left[j].isContainer) { JSONObject.MergeRecur(left[j], right[j]); } else { left[j] = right[j]; } } } } }