2

独自のシリアライゼーションを書きたい (xml とバイナリは私には合わない、「もっと ADO」の方法が欲しい)

だから私はインターフェースを定義しました:

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

オブジェクトのインスタンスを作成して、そのオブジェクトのスキーマを取得したくありません。

And: DeserializeData は、インスタンスを使用するのではなく、インスタンスを返す必要があります。したがって、それも静的であるべきだと思います。(わかりました、データテーブルからインスタンスを初期化できます...)

何か案は?どうすればそれをモデル化できますか? static はインターフェイスでは許可されておらず、私のクラスは既に別の抽象基本クラスから継承しています。

どんなアイデアでも大歓迎です!

4

2 に答える 2

1

その問題は、クラス自体の実装を強制的に処理することなく、クラスの格納方法に関するメタデータを提供できるため、他のシリアライザーが属性を利用する理由です。

于 2012-06-02T18:22:50.317 に答える
1

私が間違っているかもしれませんが、これは実際にはユーティリティ クラスのタスクです。たとえばDeserializeData、コードのどこかで、構築する型を決定します。提案されたコードでは、型を選択し、その静的メソッドを呼び出します。それで?各タイプには、シリアル化を行うための独自のコードがありますか? DRYを維持するために、すべての作業を行うクラスを作成することになるでしょう。したがって、次DeserializeDataのようなユーティリティ クラスに 1 つのメソッドを含めることもできます。

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

このメソッドでは、おそらくデータ スキーマを取得します。

おそらくSerializeData()インスタンスメソッドかもしれませんが、それもその作業を何らかのユーティリティクラスに委譲します。

あなたの質問を完全に誤解している場合はお知らせください。

于 2012-06-02T21:09:15.693 に答える