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);
                    }
                }
            }
        }