В настоящее время у меня есть несколько интерфейсов (здесь урезано):
public interface IJobGroup
{
string Name { get; }
IEnumerable<IJobItem> Jobs { get; }
}
public interface IJobItem
{
string Name { get; }
void Start();
event EventHandler Finished;
}
Также я сделал несколько реализаций этих интерфейсов. Но теперь я хотел бы сериализовать мой JobGroup
. До сих пор я уже сделал несколько попыток с DataContractSerializer и XMLSerializer и добавил все необходимые атрибуты в мои реализации вышеупомянутых интерфейсов.
Пока все хорошо. Но я бы хотел решить две вещи с помощью моего необходимого решения:
- Принудить всех, кто реализует мой интерфейс, сделать его класс сериализуемым в XML.
- Если я сериализую
IJobGroup
, я бы хотел видеть все в результирующем XML-файле в открытом тексте , а не в виде данных, закодированных в Base64.
В этом случае кто-то может изменить XML-файл вручную (если он знает, что делает).
Некоторые идеи, которые не очень хорошо работают:
ISerializable
Это на самом деле не требует сериализации объекта. Он скорее используется для реализации настраиваемого сериализатора, чем для использования атрибутов по умолчанию.
свойство в интерфейсах, которые инкапсулировали сериализацию (например, byte[] State
)
Я мог бы добавить другое свойство байтового массива State к интерфейсу, который будет получать и устанавливать сериализованные данные. Может быть, это имеет преимущество в том, что каждый элемент может реализовывать свой собственный процесс того, как он будет что-то сериализировать. Но недостатком может быть то, что большой xml-файл содержит байт [] в виде закодированного в Base64 блока данных, который не может быть легко прочитан человеком.
Так что, может быть, у кого-то есть идея или она может указать мне правильное направление.