Я немного покопался. Это выполнимо, но не сразу.
При сериализации дерева Sitecore вызывает: Sitecore.Shell.Framework.Commands.Serialization.DumpTreeCommand. Это определено в /App_Config/Commands.config. При десериализации вызывается эквивалентный .LoadTreeCommand.
То, что делают эти команды, немного больше, чем вызов:
protected override void Dump(Item item)
{
Sitecore.Data.Serialization.Manager.DumpTree(item);
}
И, к сожалению, чтобы получить доступ к функциональности, которую нужно переопределить, похоже, что вам необходимо: 1) переопределить команду в command.config, а затем создать свой собственный менеджер сериализации (наследующий от Sitecore). *
Я не совсем уверен, насколько это легко, поскольку большинство методов в этом классе являются статическими членами. Метод, который вам нужно переопределить / повторно реализовать, таков:
public static void DumpItem(string path, Item item)
{
Assert.ArgumentNotNullOrEmpty(path, "path");
Assert.ArgumentNotNull(item, "item");
Directory.CreateDirectory(Path.GetDirectoryName(path));
using (new SecurityDisabler())
{
TextWriter writer = new StreamWriter(File.Create(path));
try
{
ItemSynchronization.WriteItem(item, writer);
}
catch
{
}
writer.Close();
}
}
Имя файла, как вы можете видеть, полностью основано на пути элемента. Предполагается, что вы, возможно, могли бы избежать использования чего-то вроде .Replace ("$", "! Dollartoken!") И реализовать обратное в своем десериализаторе.
Кажется, много работы, к сожалению.