serializar - Nombrando DataContracts Genéricos en WCF
wcf datacontract example (2)
Estoy usando una clase genérica como contrato de datos de respuesta. Todo está bien y esto está agilizando significativamente el diseño de mi servicio WCF.
A cada solicitud se le asigna un objeto de respuesta estándar con la siguiente firma:
- Estado (Enum)
- Mensaje (cadena)
- Resultado (T)
A continuación se encuentra la clase de respuesta:
[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; }
}
Y esto funciona brillantemente. El único problema que tengo es que al WCF Client se le da un nombre desagradable para este objeto "ResponseOfAccountnT9LOUZL"
¿Hay alguna forma de evitar este problema?
¿Debo usar esta clase como una clase abstracta que se hereda? Prefiero no tener múltiples clases abarrotando mi código.
Ok encontré la respuesta
Puede especificar la versión serializada usando la siguiente sintaxis:
[DataContract (Name = "MyClassOf {0} {1}")]
clase MyClass {}
Entonces, si tuviera una Clase llamada Respuesta que tomara un parámetro Generic T, usaría
[DataContract (Name = "ResponseOfType {0}")]
respuesta de clase {}
[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)
{....
Gracias Harry