public string SerializeToString() { if (factionDatabase == null) { return(string.Empty); } var sb = new StringBuilder(); // Record faction count: sb.AppendFormat("{0},", factionDatabase.factions.Length); for (int f = 0; f < factionDatabase.factions.Length; f++) { var faction = factionDatabase.factions[f]; // Record faction ID and name: sb.AppendFormat("{0},{1},", faction.id, SafeConvert.ToSerializedElement(faction.name)); // Record faction personality trait values: for (int p = 0; p < faction.traits.Length; p++) { sb.AppendFormat("{0},", faction.traits[p]); } // Record faction parents: sb.AppendFormat("{0},", faction.parents.Length); for (int p = 0; p < faction.parents.Length; p++) { var parentID = faction.parents[p]; sb.AppendFormat("{0},", parentID); } // Record faction relationships: sb.AppendFormat("{0},", faction.relationships.Count); for (int r = 0; r < faction.relationships.Count; r++) { var relationship = faction.relationships[r]; // Record relationship faction ID: sb.AppendFormat("{0},{1},", relationship.factionID, (relationship.inheritable ? 1 : 0)); // Record relationship trait values: for (int t = 0; t < factionDatabase.relationshipTraitDefinitions.Length; t++) { sb.AppendFormat("{0},", relationship.traits[t]); } } } return(sb.ToString()); }