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