在WCF中命名通用DataContracts

And*_*rry 19 wcf naming dynamic 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; }
    }
Run Code Online (Sandbox Code Playgroud)

这很有效.我遇到的唯一问题是WCF客户端为此对象提供了一个非常糟糕的名称"ResponseOfAccountnT9LOUZL"

有办法解决这个问题吗?

我应该将此类用作继承的Abstract类吗?我宁愿不让多个类混乱我的代码.

And*_*rry 27

好的找到答案

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

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

class MyClass {}

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

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

class Response {}