Подтвердить что ты не робот

Именование общих DataContracts в WCF

Я использую общий класс в качестве контракта с данными ответа. Все это хорошо, и это значительно упрощает дизайн моей службы 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"

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

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

4b9b3361

Ответ 1

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

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

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

класс MyClass {}

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

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

class Response {}

Ответ 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)
        {....

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