【问题标题】:Naming Generic DataContracts in WCF在 WCF 中命名通用 DataContract
【发布时间】:2010-10-05 07:40:03
【问题描述】:

我使用泛型类作为响应数据协定。一切都很好,这大大简化了我的 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”提供了一个非常糟糕的名称

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

我应该将这个类用作继承的抽象类吗? 我宁愿没有多个类使我的代码混乱。

【问题讨论】:

  • 这就是stackoverflow对我的价值……我知道我以前问过这个问题。甚至回答了!就是这样 - 谢谢
  • 您的主要服务方法的返回类型是什么。即你可以你应该如何使用它。 PLZ

标签: wcf dynamic naming datacontract


【解决方案1】:

好的,找到了Answer

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

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

类 MyClass { }

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

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

类响应{ }

【讨论】:

    【解决方案2】:
    [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)
            {....
    

    谢谢你,哈利

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多