Именование универсальных контрактов данных в WCF

StackOverflow https://stackoverflow.com/questions/509803

Вопрос

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

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

  • Статус (перечисление)
  • Сообщение (строка)
  • Результат (Т)

Ниже приведен класс ответа:

[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».

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

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

Это было полезно?

Решение

Хорошо, нашел Отвечать

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

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

класс МойКласс { }

Поэтому, если бы у меня был класс, называемый ответом, который принимает общий параметр 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)
        {....

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top