目前,我有一些接口(剥离下来这里):如何通过接口强制执行xml序列化?
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
)我可以添加另一个字节数组属性国家到接口,这将在获取和设置串行数据接口内
属性。也许这会有好处,每个项目都可以实现它自己的序列化过程。但缺点是大的xml文件包含byte []作为Base64编码的数据块,不能被人轻松读取。
所以,也许有人有一个想法或可能指向我的正确方向。
这将是一种可能的方式。但我(和我的同事)喜欢面向契约的接口方式。那么,为什么没有一个好的方法来说明“让我的序列化”这个合约? – Oliver 2010-03-31 06:23:44
这是一个很好的问题。但是我认为你已经到了问题的地步,你必须决定构建自己的ISerializable实现,自定义序列化程序还是抽象类。不漂亮的选择,这是肯定的...! – code4life 2010-03-31 14:33:58
即使我不喜欢答案,这是我必须接受的。 ;-) – Oliver 2010-04-09 11:28:08