2012-06-02 63 views
2

我想寫我自己的序列化(XML和二進制不適合我, 我想「更ADO」的方式)在接口的靜態

,所以我定義的接口:

interface ISerializeData 
{ 
    DataTable GetDataSchema(); 
    DataTable SerializeData(); 
    object DeserializeData(DataTable data); 
} 

現在我不想創建一個對象的實例,讓我得到該對象的架構。

And:DeserializeData應該返回一個實例,而不是使用一個實例。 因此,我認爲它應該也是靜態的。 (好吧,它可以從數據表初始化一個實例...)

任何想法?我如何建模?靜態是不允許在 接口和我的類已經從另一個抽象 基類繼承。

任何想法讚賞!

+2

:)如果這將是靜態的,爲什麼你需要一個接口?你也可以創建靜態類並實現你的方法。 – DarthVader

+0

因爲我有不止一個類應該有這種語義。靜態類不是一個選項,我想序列化它並使用它的多個實例。 –

回答

1

這個問題就是爲什麼其他串行使用屬性,因爲它們允許你提供有關類如何將存儲與出強迫你對付階級本身的實現元數據。

+0

相當沉重,我想做的事情。也許我寫了一些幫手類。 –

+0

接受這個答案,因爲反射和屬性是正確做我想做的唯一方法。只是覺得有些大師會提出一個比我現在擁有的「骯髒」解決方案更好的主意。 –

1

也許我錯了,但這實際上是一個公用事業類的任務。以DeserializeData爲例。在代碼中的某個地方,您可以決定要構建哪種類型。在你提出的代碼中,你會選擇類型並調用它的靜態方法。怎麼辦?每種類型都有自己的代碼來完成序列化嗎?你最終可能會創建一些課程來完成所有的工作,以保持乾爽。所以,你不妨在一個工具類一個DeserializeData方法,如:

public static T DeserializeData(DataTable data) 
    where T : new 
{ 
    var T = new T(); 
    .... // Set properties 
} 

在這種方法中,你可能會得到的數據模式。

也許SerializeData()可能是一個實例方法,但它也會將它的工作委託給某個實用類。

請讓我知道,如果我完全誤解了你的問題。

+0

但是模式是模型類的一部分,它只是一個其他表示而非類。現在我寫了一堆實用課程,也許我有時間在未來用屬性和思考做到這一點。 –