private static void DeserializeTemplate(DataStorage dataStorage, ID templateId, string serializationFolderName) { string filePath = templateId.FindFilePath(serializationFolderName); if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) { return; } DsDbTemplate dsDbTemplate = new DsDbTemplate(templateId, serializationFolderName); dataStorage.AddFakeTemplate(dsDbTemplate); // Deserialize base templates DbField baseTemplatesField = dsDbTemplate.Fields .FirstOrDefault(f => f.ID == FieldIDs.BaseTemplate); if (!string.IsNullOrWhiteSpace(baseTemplatesField.Value)) { foreach (ID baseTemplateId in baseTemplatesField.Value .Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries) .Where(ID.IsID) .Select(ID.Parse)) { if (dataStorage.GetFakeItem(baseTemplateId) == null) { DeserializeTemplate(dataStorage, baseTemplateId, dsDbTemplate.SerializationFolderName); } } } }