Как обеспечить сериализацию XML через интерфейс? - PullRequest
0 голосов
/ 29 марта 2010

В настоящее время у меня есть несколько интерфейсов (здесь урезано):

public interface IJobGroup
{
    string Name { get; }
    IEnumerable<IJobItem> Jobs { get; }
}

public interface IJobItem
{
    string Name { get; }
    void Start();
    event EventHandler Finished;
}

Также я сделал несколько реализаций этих интерфейсов. Но теперь я хотел бы сериализовать мой JobGroup. До сих пор я уже сделал несколько попыток с DataContractSerializer и XMLSerializer и добавил все необходимые атрибуты в мои реализации вышеупомянутых интерфейсов.

Пока все хорошо. Но я бы хотел решить две вещи с помощью моего необходимого решения:

  1. Принудить всех, кто реализует мой интерфейс, сделать его класс сериализуемым в XML.
  2. Если я сериализую IJobGroup, я бы хотел видеть все в результирующем XML-файле в открытом тексте , а не в виде данных, закодированных в Base64. В этом случае кто-то может изменить XML-файл вручную (если он знает, что делает).

Некоторые идеи, которые не очень хорошо работают:

  • ISerializable

    Это на самом деле не требует сериализации объекта. Он скорее используется для реализации настраиваемого сериализатора, чем для использования атрибутов по умолчанию.

  • свойство в интерфейсах, которые инкапсулировали сериализацию (например, byte[] State)

    Я мог бы добавить другое свойство байтового массива State к интерфейсу, который будет получать и устанавливать сериализованные данные. Может быть, это имеет преимущество в том, что каждый элемент может реализовывать свой собственный процесс того, как он будет что-то сериализировать. Но недостатком может быть то, что большой xml-файл содержит байт [] в виде закодированного в Base64 блока данных, который не может быть легко прочитан человеком.

Так что, может быть, у кого-то есть идея или она может указать мне правильное направление.

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Как насчет использования абстрактных классов? Я не думаю, что вы можете обеспечить поведение с интерфейсами ... интерфейсы более ориентированы на контракты, чем что-либо еще ...

0 голосов
/ 29 марта 2010

Сериализация XML по умолчанию не поддерживает интерфейсы по умолчанию, но, возможно, вы сможете извлечь из XmlSerializer и создать что-то с помощью этой платформы?

...