Frage

Ich verwende eine generische Klasse als Antwortdaten Vertrag. Alles ist gut, und dies das Design meiner WCF-Dienst strafft deutlich.

Jede Anforderung wird gegeben ein Standard-Antwortobjekt mit der folgenden Signatur:

  • Status (Enum)
  • Nachricht (String)
  • Ergebnis (T)

Im Folgenden finden Sie die Antwort-Klasse:

[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; }
    }

Und das funktioniert Brillantly. Die einzige Problem, das ich habe ist, dass das WCF-Client einen wirklich beschissenen Name für dieses Objekt „ResponseOfAccountnT9LOUZL“ gegeben ist

Gibt es eine Möglichkeit, um dieses Problem zu bekommen?

Soll ich diese Klasse als nur eine abstrakte Klasse verwenden, die vererbt wird? Ich möchte lieber nicht mehrere Klassen haben meinen Code unübersichtlich.

War es hilfreich?

Lösung

Ok die Antwort

Sie können die serialisierte Version mit folgenden Syntax angegeben werden:

  

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

     

class MyClass {}

Also, wenn ich hatte eine Klasse namens Antwort, die ein generischen T Parameter übernimmt Ich würde verwenden

  

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

     

class Antwort {}

Andere Tipps

[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)
        {....

Danke Harry

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top