2017-09-05 7 views
0

J'essaie de comprendre comment sérialiser plusieurs objets en un fichier XML géant pour l'écrire par lots sur un serveur de mise en cache Redis. Je sais comment sérialiser des données de chaque objet individuel mais j'ai besoin de grouper toutes les données pour tous les objets dans un seul dossier et l'écris à redis.Besoin d'aide sérialisation de plusieurs objets pour la mise en cache à redis en utilisant C#

QUESTION: Comment lot sérialisation plusieurs objets avec plusieurs variables de données

génération de code de chaque objet:

private void Initialize() 
     { 
      // runs through a list of 600ish skills and creates a call data generator for each skill 
      foreach (var skill in _skills) 
      { 
       IFeedServiceAgent feedService = new FeedServiceAgent(); 
       feedService.Subscribe(skill.SkillNumber.ToString(), skill.CallServer); 
       CallDataGenerator calldata = new CallDataGenerator(_callDataRepo, feedService); 
       _callDataGenerators.Add(calldata); 
       Console.WriteLine("Instance of " + skill.SkillNumber + " From Call Server " + skill.CallServer + " is preparing to start"); 
      } 
     } 

Chaque générateur génère le même type d'information, mais pour une compétence différente sur notre système d'appel. il y a environ 600 compétences donc 600 générateurs.

Exemple de données généré:

_skillData.OldestCall = e.CmsData.Skill.OldestCall; 
_skillData.AgentsStaffed = e.CmsData.Skill.AgentsStaffed; 
_skillData.AgentsAuxed = e.CmsData.Skill.AgentsInAux; 
_skillData.AgentsAvailable = e.CmsData.Skill.AgentsAvailable; 
_skillData.AgentsOnCalls = e.CmsData.Skill.AgentsOnAcdCall; 
_skillData.CallsWaitingInQueue = e.CmsData.Skill.InQueueInRing; 
_skillData.Asa = e.CmsData.Skill.AnswerTimePerAcdCall; 
_skillData.TimeSubmitted = DateTime.Now; 
_skillData.EstimatedHoldTimeLow = e.CmsData.Skill.ExpectedWaitTimeLow; 
_skillData.EstimatedHoldTimeMedium = e.CmsData.Skill.ExpectedWaitTimeMedium; 
_skillData.EstimatedHoldTimeHigh = e.CmsData.Skill.ExpectedWaitTimeHigh; 
_agentData.AgentName = item.AgName; 
_agentData.AgentExtension = item.Extension; 
_agentData.AgentAuxReason = item.AuxReasonDescription; 
_agentData.AgentId = item.LoginId; 
_agentData.AgentAcdState = item.WorkModeDirectionDescription; 
_agentData.AgentTimeInState = DateTime.Now - item.DateTimeUpdated; 
_agentData.TimeSubmitted = DateTime.Now; 
+0

J'ai envisagé de créer une liste et d'ajouter tous mes générateurs à une liste, mais elle enverra seulement les objets générateurs et aucun des autres objets auxquels les données sont assignées par le générateur, I.E. _agentData ou _skillData je pense – michaeltc1989

+0

je devrais me corriger. Je sais que c'est ce que je voudrais faire, mais cela ne fonctionne pas parce que les objets qui sont contenus dans les objets du générateur ne sont pas ajoutés au xml – michaeltc1989

+0

Les objets doivent être publics au sérialiseur sinon ils ne sont pas ajoutés au xml . – jdweng

Répondre

0

Il ressemble à mon original mais de créer une liste de mes générateurs était correcte. Si vous créez une liste, puis sérialiser l'objet liste, il inclura tous les objets publics qu'il contient. Le mien ne fonctionnait pas initialement parce que mes objets à l'intérieur de mon générateur étaient privés. Merci à @jdweng pour l'avoir signalé!