2010-03-29 34 views
0

目前,我有一些接口(剝離下來這裏):如何通過接口強制執行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進行了一些嘗試,並將所有必需的屬性添加到了上述接口的實現中。

到目前爲止,這麼好。但我想用我所需的解決方案解決兩件事:

  1. 強制每個實現我的接口的人使他的類可序列化爲xml。
  2. 如果我序列化一個IJobGroup,我想在明文中看到生成的xml文件中的所有內容,而不是Base64編碼數據。 在這種情況下,有人可以手動更改xml文件(如果他知道他在做什麼)。

一些想法,這並不能很好地工作:

  • ISerializable

    這並沒有真正執行序列化對象。它相當習慣於實現自定義序列化器,而不是使用屬性的默認用法。該包封的序列化(例如byte[] State

    我可以添加另一個字節數組屬性國家到接口,這將在獲取和設置串行數據接口內

  • 屬性。也許這會有好處,每個項目都可以實現它自己的序列化過程。但缺點是大的xml文件包含byte []作爲Base64編碼的數據塊,不能被人輕鬆讀取。

所以,也許有人有一個想法或可能指向我的正確方向。

回答

1

如何使用抽象類?我不認爲你可以強制接口的行爲...接口比其他任何東西更契合...

+0

這將是一種可能的方式。但我(和我的同事)喜歡面向契約的接口方式。那麼,爲什麼沒有一個好的方法來說明「讓我的序列化」這個合約? – Oliver 2010-03-31 06:23:44

+0

這是一個很好的問題。但是我認爲你已經到了問題的地步,你必須決定構建自己的ISerializable實現,自定義序列化程序還是抽象類。不漂亮的選擇,這是肯定的...! – code4life 2010-03-31 14:33:58

+0

即使我不喜歡答案,這是我必須接受的。 ;-) – Oliver 2010-04-09 11:28:08

0

默認的XML序列化默認情況下不支持接口,但是您可能能夠從XmlSerializer派生並使用該框架構建某些內容?

+0

而不是建立自己的我希望已經存在的東西。 – Oliver 2010-03-31 06:21:58

相關問題