在WCF中命名通用DataContracts

时间:2009-02-04 01:53:23

标签: wcf dynamic naming datacontract

我使用通用类作为响应数据合约。一切都很好,这大大简化了我的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”

有没有办法解决这个问题?

我是否应该将此类用作继承的Abstract类? 我宁愿不让多个课程混乱我的代码。

2 个答案:

答案 0 :(得分:27)

好的找到Answer

您可以使用以下语法指定序列化版本:

  

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

     

class MyClass {}

因此,如果我有一个名为Response的类,它采用Generic T参数 我会用

  

[DataContract(Name =“ResponseOfType {0}”)]

     

class Response {}

答案 1 :(得分: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)
        {....

谢谢Harry