Именование общих 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"
Есть ли способ обойти эту проблему?
Должен ли я использовать этот класс как абстрактный класс, который наследуется?
Я бы предпочел не иметь несколько классов, загромождающих мой код.
Ответы
Ответ 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)
{....
Спасибо, Гарри