19

ジェネリック クラスを応答データ コントラクトとして使用しています。すべてが順調で、これにより、WCF サービスの設計が大幅に合理化されています。

各リクエストには、次のシグネチャを持つ標準のレスポンス オブジェクトが与えられます。

  • ステータス (列挙型)
  • メッセージ (文字列)
  • 結果 (T)

以下は応答クラスです。

[DataContract]
    public class Response<T>
    {
        public Response() {}

        public Response(T result)
        {
            this.result = result;
            if (result != null)
            {
                this.status = Status.StatusEnum.Success;
            }
            else
            {
                this.status = Status.StatusEnum.Warning;
            }
        }

        public Response(T result, Status.StatusEnum status)
        {
            this.status = status;
            this.message = message;
        }

        public Response(T result, Status.StatusEnum status, string message)
        {
            this.status = status;
            this.message = message;
            this.result = result;
        }

        [DataMember]
        public Status.StatusEnum status { get; set; }

        [DataMember]
        public string message { get; set; }

        [DataMember]
        public T result { get; set; }
    }

そして、これは見事に機能します。私が抱えている唯一の問題は、WCFクライアントがこのオブジェクト「ResponseOfAccountnT9LOUZL」に本当にくだらない名前を付けられていることです

この問題を回避する方法はありますか?

このクラスを継承された単なる抽象クラスとして使用する必要がありますか? 複数のクラスでコードが乱雑になるのは避けたいと思います。

4

2 に答える 2

27

答えが見つかりました

次の構文を使用して、シリアル化されたバージョンを指定できます。

[DataContract(Name = "MyClassOf {0} {1}")]

クラスMyClass{}

したがって、Generic Tパラメーターを受け取るResponseというクラスがある場合は、次を使用します。

[DataContract(Name = "ResponseOfType {0}")]

クラス応答{}

于 2009-02-04T02:40:21.083 に答える
1
[DataContract(Name = "ReturnObjectOfType{0}")]
    public class ReturnObject<T>
    {....

//Iservice
[OperationContract]
        ReturnObject<AdresKisiBilgi> BeldeAdresKisiBilgiSorgula(string tcKimlikNo);


//Service
public ReturnObject<HbysBusiness.MernisGuvenService.AdresKisiBilgi> BeldeAdresKisiBilgiSorgula(string tcKimlikNo)
        {
            return new MernisBiz().BeldeAdresKisiBilgiSorgula(tcKimlikNo);
        }


client:
 public ReturnObjectOfAdresKisiBilgi BeldeAdresKisiBilgiSorgula(string tcKimlikNo)
        {....

ハリーありがとう

于 2010-06-30T11:28:56.850 に答える