2011-08-07 17 views
1

basicHttpBindingを使用するWCFサービスがあります。サービスメソッドでは、返されるクラスがあります。このクラスでは、プロパティを動的に/プログラムで除外し、XMLのプロパティ名を変更する必要があります。これは、WSDLとサービスメソッドが呼び出されたときの両方で実行する必要があります。WCFでXmlAttributeOverridesを使用する方法

私は最良のソリューションを探していましたが、(1)XmlSerializerでXmlAttributeOverridesを使用するか、(2)カスタマイズする必要があるクラスでIXmlSerializableを実装する必要があるようです。あるいはもっと良い解決策があるかもしれません。私は、Property Name + "Specified"をクラスに追加でき、それらのプロパティを除外できることを知っています。ただし、これはWSDLでは除外されず、プロパティの名前変更に関する問題は解決されません。

なぜこれをしたいですか?アプリケーションのグローバリゼーションとカスタマイズのためです。私たちのアプリケーションには多くのプロパティが組み込まれていますが、これらのプロパティはアプリケーションのユーザから完全に隠されたり隠されたりすることがあります。

私は最良の選択肢は、自分のカスタムシリアライザでWCFシリアライザを交換することです。しかし、XmlSerializerを使用するカスタムクラスに対してこれを行う方法の良い例は見つかりませんでした。また、私はどのように特定のクラスのXmlAttributeOverridesを渡すか分からない。

また、これは同じ機能を必要とする他の人には当てはまらないかもしれませんが、私のアプリケーションでは、アプリケーションの存続期間中に値を1回だけ初期化する必要があります。ひどいC#では、静的な読み取り専用変数を属性とともに使用することはできません。

public Customer 
{ 
    public string Address1 
    { 
    get; 
    set; 
    } 

    public string Address2 
    { 
    get; 
    set; 
    } 

    public string Zipcode 
    { 
    get; 
    set; 
    } 
} 

この例では、私が代わりに郵便番号のアプリケーションの使用の郵便番号を特定のインストール用に好きで、アドレス2プロパティを隠します:

はここでクラスの簡単な例です。

ご協力いただきありがとうございます。

おかげで、 タイラー

答えて

0

私はこれが出て警官のビットのように思えるが、知っているあなたのオブジェクトのプロパティ名が動的であるため、なぜこれだけのXmlSerializerシャッフルを行うのではなく、プロパティの袋詰めを使うのか?

+0

OPにWSDLなどが記述されています。また、プロパティバッグはシリアル化レイアウトよりもほとんど*選択肢がありません。 –

+0

プロパティバッグはプロパティ名をインデクサ文字列に変更するので、リアルタイムで名前を選択する柔軟性が得られます。しかし、私はwsdlとクライアントがオブジェクトを消費することは、実際にプロパティのインデクサやデータ型の良い定義を得るとは思わない。私は本当により良い構造化XMLとスキーマが必要です。私は私のOPに例を追加します。 – tbcarver

1

私たちのアプリケーションには多くのプロパティがあり、アプリケーションのユーザーから名前を変更したり隠したりすることがあります。

標準的なアプローチは、特別なデータ転送オブジェクト(DTO)を作成することです。またはいくつか。

+0

それは私が質問を読むとき私の頭を通過したものです.... –

+0

プロパティを持つどのクラスもDTOではありませんか? DTOからxmlとxmlスキーマをビルドするときに、プロパティを動的に除外して名前を変更する必要があるので、私は既にDTOを持っていると思います。これを達成するために、WCFでDTOを使用する「標準的なアプローチ」についての記事をリンクできますか? – tbcarver

+0

DTOは特別なものではありません(反対に)。ポイントは、転送ジョブ用に設計されています。 –

関連する問題