0

これは、他のトピックからの繰り返しの質問のように聞こえるかもしれませんが、インターフェイスの定義では延期されています。

IClass1という名前のインターフェイスがあり、その定義にはIClass2などのインターフェイスのリストが含まれています

このインターフェイスを実装するビジネス ユニットがあります。実装は当然このようになります

class Class1: IClass1
{
    ....whatever properties
    List<IClass2> DataItems { get; set; }
}

class Class2:IClass2
{
    ...whatever properties
}

問題は、XmlSerializerそれがインターフェイスであるため、Class1 のリストについて不平を言うことです! したがって、私の質問は次のとおりです。単純に、DataItems リストで逆シリアル化する必要があるインスタンスの型が何であるかを常に知っています。これは Class2 型になります。XML シリアライザにそれを伝える方法は?

私は多くの回避策を見てきましたが、ダミーのプロパティを使用し、シリアル化/逆シリアル化プロセス中にインターフェイスのリストを無視することが最も適していると思います。クラスにシリアル化を実装する

4

1 に答える 1

1

DataContracts を使用している場合、 を使用KnownTypeAttributeして、デシリアライザーがデシリアライズ時に使用する 1 つ以上の型のリストを指定できます。

文字列パラメーターを受け取るバージョンでは、一連の型を返すメソッドの名前を指定できます。これは、状況によっては使いやすい場合があります。

私が提供したリンクには、ページの最後にいくつかのサンプル コードがあります。

于 2013-05-21T07:40:31.250 に答える