目前,我有一些接口(剝離下來這裏):如何通過接口強制執行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