private void Partition(CISymbolDictionary aDictionary) { foreach (CISymbol crashItemSymbol in aDictionary) { bool serializable = CXmlSymbol.IsSerializable(crashItemSymbol); if (serializable) { Symbol symbol = crashItemSymbol.Symbol; SymbolCollection symbolCollection = symbol.Collection; // string collectionName = symbolCollection.FileName.FileNameInHost.ToUpper(); CXmlSymbolSet set = null; // if (!iSets.ContainsKey(collectionName)) { set = new CXmlSymbolSet(symbolCollection); iSets.Add(collectionName, set); } else { set = iSets[collectionName]; } // set.Add(crashItemSymbol); } } }
protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters) { // First partition the symbols into sets CISymbolDictionary globalSymbols = aParameters.Container.Symbols; Partition(globalSymbols); // Also get the dictionaries from the individual processes CIElementList <CIProcess> processes = aParameters.Container.ChildrenByType <CIProcess>(); foreach (CIProcess process in processes) { CISymbolDictionary processSymbols = process.Symbols; Partition(processSymbols); } // Then serialize the sets foreach (KeyValuePair <string, CXmlSymbolSet> kvp in iSets) { CXmlSymbolSet set = kvp.Value; set.XmlSerialize(aParameters); } }