如何通过接口强制执行xml序列化?

时间:2010-03-29 09:04:18

标签: c# .net-3.5 serialization

目前我有一些接口(在这里被剥离):

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文件(如果他知道他在做什么)。
  3. 有些想法效果不佳:

    • ISerializable

      这并不强制序列化对象。它主要用于实现自定义序列化程序,而不是使用属性的默认用法。

    • 封装序列化的接口中的
    • 属性(例如byte[] State

      我可以在接口中添加另一个字节数组属性 State ,它将获取并设置序列化数据。也许这样做的好处是每个项目都可以实现自己如何序列化某些东西的过程。但缺点是大的xml文件包含byte []作为Base64编码的数据块,这是人类无法轻易读取的。

    所以,也许有人有想法或者可以指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

如何使用抽象类?我不认为你可以用接口强制行为......接口比其他任何东西都更加面向合约...

答案 1 :(得分:0)

默认情况下,默认的XML序列化不支持接口,但您可以从XmlSerializer派生并使用该框架构建某些内容?