0

というクラスがありWebActionます。そして、、 、WebActionなどのいくつかのクラスは から継承されています。それらには多くの共通点がありますが、大きな違いが 1 つあります。それぞれが機能するには異なるデータセットが必要ですが、すべてが何らかのデータを必要とします。今まで不動産を持っていたLoginStartWebActionLoginConfirmWebActionSearchWebAction

object DataObject {get; set;}

各オブジェクトで、指定されたクラスに適した型 (ほとんどの場合、いくつかの複合型) にキャストしました。

私はこのように使用しています:

Object data = DataSet;    
for (int i = stepNo; i < _actions.Count; i++)
    {
        _actions[i].SetData(data);
        Response actionResponse = _actions[i].Perform();
        ThrowErrorIfServerError(actionResponse);
        if (i < _actions.Count - 1)
        {
            data = _actions[i].PrepareDataFor(_actions[i + 1].GetType());
        }
     }

しかし今、この DataObject をシリアル化し、どこかに保存する必要があります。すべての可能性があるため、型をシリアル化できませんobject

異なるがシリアル化可能なデータを 1 つのクラス ファミリに提供する良い方法はありますか?

4

2 に答える 2

1

基本クラスにプロパティがある場合は、オブジェクト型である必要があります。

派生型にプロパティがある場合は、任意の型にすることができます。

使用しているシリアライザー/フォーマッターを指定していません。

XmlSerializerを使用している場合は何も必要ありません。すべてのパブリック プロパティがシリアル化されます。

DataContractSerializerを使用している場合は、 KnownType属性を使用して、データ オブジェクトのすべての可能なタイプを指定する必要があります。

BinaryFormatterを使用している場合、唯一の前提条件は、派生型がシリアライズ可能でなければならないということです。

他のシリアライザーを使用している場合は、シリアライザーの API 設計、カスタム型情報を受け入れる方法 (シリアライゼーション/デシリアライゼーション中、この情報が本当に必要な場合) に依存します。

于 2012-05-23T16:50:53.177 に答える
0

BinarySerializer を使用してシリアル化すると、シリアル化された出力に型が含まれるため、オブジェクトとして渡している場合でも、後で同じ型に逆シリアル化できます。

于 2012-05-23T12:58:01.033 に答える