public static List <string> GetCsvConversations() { var result = new List <string>(); try { foreach (var conversation in Instance.conversations) { // <conversation> if (!conversation.IsFinished()) { Trace.Debug($"Skipping ongoing conversation: {conversation.conversationId}"); OngoingConversationManager.AddOngoingConversationIfDoesntExist(conversation.conversationId); continue; } var convItems = MappingManager.GetMappingItemSublist("conversations"); var convValues = GetValues(convItems, conversation); if (conversation.participants != null && conversation.participants.Any()) { foreach (var participant in conversation.participants) { // <participant> var partItems = MappingManager.GetMappingItemSublist("participants"); var partValues = GetValues(partItems, participant); if (participant.sessions != null && participant.sessions.Any()) { foreach (var session in participant.sessions) { // <session> var sessItems = MappingManager.GetMappingItemSublist("sessions"); var sessValues = GetValues(sessItems, session); if (session.segments != null && session.segments.Any()) { foreach (var segment in session.segments) { // <segment> var segItems = MappingManager.GetMappingItemSublist("segments"); var segValues = GetValues(segItems, segment); var csvLine = ConvertValuesToCsvLine(new List <Dictionary <string, string> >() { convValues, partValues, sessValues, segValues }); AddCsvLine(conversation.conversationId, csvLine, ref result); // </segment> } } else { var csvLine = ConvertValuesToCsvLine(new List <Dictionary <string, string> >() { convValues, partValues, sessValues }); AddCsvLine(conversation.conversationId, csvLine, ref result); } // </session> } } else { var csvLine = ConvertValuesToCsvLine(new List <Dictionary <string, string> >() { convValues, partValues }); AddCsvLine(conversation.conversationId, csvLine, ref result); } // </participant> } } else { var csvLine = ConvertValuesToCsvLine(new List <Dictionary <string, string> >() { convValues }); AddCsvLine(conversation.conversationId, csvLine, ref result); } // </conversation> } } catch (Exception ex) { Trace.Error("Error during transformation JSON to CSV", ex); } return(result); }