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