У меня есть a RichTextBox
и потребность сериализировать ее содержание к моей базе данных просто в целях устройства хранения данных. Казалось бы, что у меня есть выбор между сериализацией как XAML или как RTF, и задаюсь вопросом, существуют ли какие-либо преимущества для сериализации к XAML по RTF, который я рассмотрел бы как более "стандартный".
В частности, я теряю возможность путем сериализации к RTF вместо XAML? Я понимаю, что XAML поддерживает пользовательские классы в FlowDocument, но я в настоящее время не использую пользовательских классов (хотя потенциал для расширяемости мог бы быть достаточной причиной использовать XAML).
Обновление: Я закончил тем, что шел с RTF из-за его поддержки закодированных текстом встроенных изображений. XAML, кажется, не включает данные изображения в свое кодирование, и XamlPackage кодирует к двоичному файлу, таким образом, RTF просто работает лучше на меня. До сих пор я не заметил отсутствия в возможности.
Если все, что делают ваши пользователи, это ввод текста в RichTextBox и форматирование символов, RTF так же хорош, как XAML. Однако существует множество возможностей FlowDocument, которые вы можете использовать в своем пользовательском интерфейсе и которые не конвертируются в RTF.
Вот некоторые примеры возможностей FlowDocument (и RichTextBox), которые не могут быть выражены в RTF или реализованы по-другому:
Например, предположим, вы хотите позволить пользователям перетаскивать или вырезать/вставлять поле "текущая дата/время" в RichTextBox, которое всегда будет показывать текущую дату и время. Это можно сделать, добавив второй RichTextBox, доступный только для чтения, который имеет InlineUIContainer и уже связанный элемент управления. Это работает даже при вырезании и вставке из других приложений и не требует пользовательских элементов управления.
Еще одним соображением является то, что код для преобразования между FlowDocument и RTF относительно сложен, поэтому его производительность может быть ниже, чем при использовании XAML. Конечно, свободный XAML не включает изображения и тому подобное - для этого нужно использовать XamlPackage. Я храню свой XamlPackage в базе данных как byte[], но вы также можете выбрать Base64-кодирование для хранения в виде строки.
В итоге, все зависит от того, хотите ли вы, чтобы пользователь мог использовать функции, недоступные в RTF. Даже если в вашем приложении нет инструментов для создания FlowDocuments, использующих эти возможности, их можно вырезать и вставить из других приложений.