質問

私はWSE 3.0ベースのWebサービス、およびそのサービスのReferences.csで定義された型を使用しますが、クライアントで必要とされるいくつかの追加機能を提供するためにそれらをサブクラスWinFormsのクライアントアプリケーションを持っています。

しかし、私は明示的に元の型にキャストバックにもかかわらず、Webサービスにバックサブクラスのインスタンスを渡すとき、私が取得恐ろしいます:

の静的に知られていないタイプを指定するには、XmlIncludeまたはSoapInclude属性を使用します。

私の派生型を参照します。

コードの概要:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

私は明示的にDefinedInReferenceCsインスタンスを作成し、関連する分野の深いコピーを実行することにより、この問題を回避することができます。より良い方法はありますか?

役に立ちましたか?

解決

XMLシリアライザは、オブジェクトを操作するためにリフレクションを使用しているので、

、あなたのベースクラスの参照は、あなたの派生クラスのインスタンスを参照することを見てからそれを維持する方法はありません。はい、あなたはXmlIncludeを使用する必要があります。

OTOH、あなたは、元のプロキシクラスに機能を追加するために部分クラスを使用して考えがありますか?そうすれば、あなたは、すべての派生クラスを必要としません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top