代码之家  ›  专栏  ›  技术社区  ›  Oliver

如何通过接口强制XML序列化?

  •  0
  • Oliver  · 技术社区  · 15 年前

    目前我有一些接口(这里去掉了这些接口):

    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 )

      我可以添加另一个字节数组属性 状态 到接口,将获取并设置序列化数据。也许这将有一个优势,即每个项目都可以实现其自己的过程,即如何序列化某些内容。但缺点是,大型XML文件包含字节[]作为base64编码的数据块,这是人类无法轻松读取的。

    所以,也许有人有主意,或者能给我指明正确的方向。

    2 回复  |  直到 15 年前
        1
  •  1
  •   code4life    15 年前

    使用抽象类怎么样?我认为你不能用接口来强制执行行为…接口比其他任何东西都更面向契约…

        2
  •  0
  •   Rowland Shaw    15 年前

    默认的XML序列化在默认情况下不支持接口,但是您可能能够从XML序列化程序派生并使用该框架构建一些东西?