Наименование общих DataContracts в WCF - PullRequest
19 голосов
/ 04 февраля 2009

Я использую Общий класс в качестве Контракта с ответными данными. Все хорошо, и это значительно упрощает дизайн моей службы WCF.

Каждый запрос получает стандартный объект ответа со следующей подписью:

  • Статус (Enum)
  • Сообщение (Строка)
  • Результат (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"

Есть ли способ обойти эту проблему?

Должен ли я использовать этот класс как просто абстрактный класс, который наследуется? Я бы предпочел не иметь несколько классов, загромождающих мой код.

Ответы [ 2 ]

27 голосов
/ 04 февраля 2009

Хорошо, найден Ответ

Вы можете указать Сериализованную версию, используя следующий синтаксис:

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

class MyClass {}

Итак, если бы у меня был класс с именем Response, который принимает параметр Generic T Я бы использовал

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

ответ класса {}

1 голос
/ 30 июня 2010
[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)
        {....

Спасибо, Гарри

...