WCF での汎用 DataContract の名前付け
-
21-08-2019 - |
質問
応答データ コントラクトとしてジェネリック クラスを使用しています。すべて順調で、これにより 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」という実にくだらない名前が付けられていることです。
この問題を回避する方法はありますか?
このクラスを継承された単なる抽象クラスとして使用する必要がありますか?複数のクラスがコードを乱雑にすることは避けたいです。
解決
[OK]をが見つからhref="http://codeidol.com/csharp/wcf/Data-Contracts/Generics/"がの回答rel="noreferrer">
あなたは、次の構文を使用して直列化されたバージョンを指定することができます: のDataContract(NAME = "MyClassOf {0} {1}") MyClassクラス{} 私は、ジェネリックTパラメータを取るレスポンスと呼ばれるクラスを持っていたのであれば
私が使用します。 のDataContract(NAME = "ResponseOfType {0}") クラスの応答{}
他のヒント
[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)
{....
あなたにハリーをありがとう
所属していません StackOverflow