私は次の構造を持っています:
public class DerivedClass : List<BaseClass>
{
//Some helper methods used against the List of BaseClass properties
//Methods
public List<BaseClass> GetListOfBaseClasses()
{
return (List<BaseClass>)this;
}
}
私のWCFサービスはBaseClassオブジェクトを認識していますが、次のようにサービスを呼び出そうとすると、クライアントはそれを汎用リストとして取得しました。
DerivedClass classD;
FillData(classD)
List<BaseClass> baseClassList = classD.GetListOfBaseClasses();
using (IService myService = ObjectFactory.GetMyService())
{
myService.DoSomething(baseClassList); //Method is expecting "List<BaseClass>"
}
次の例外が発生します。
データコントラクト名が「[一部のURIテキスト]」の「DerivedClass」と入力する必要はありません。DataContractResolverを使用するか、既知のタイプのリストに静的に不明なタイプを追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加します。
これらの属性をさまざまな組み合わせでクラスに追加しようとしましたが、それでもうまくいきませんでした。
[Serializable]
[KnownType(typeof(List<BaseClass>))]
[XmlInclude(typeof(List<BaseClass>))]
[KnownType(typeof(BaseClass))]
[XmlInclude(typeof(BaseClass))]
public class DerivedClass : List<BaseClass>
{
/// ...
}
PS-シーズ、このサイトの入力フィールドがファンキーだと思うのは私だけですか?フォーマットしようとすると、物事は動き続けます...:| 私が望むようにテキストを入力するという考えを得ることができないにもかかわらず、素晴らしいサイトです。